Ключ массива переименования PHP (НЕ повторять)

Можно ли вносить изменения в «структуру» массива ассоциативных карт (массовое переименование ключей или их полное удаление) без линейного перебора всего массива и копирования информации в новый массив? Есть ли другая структура данных PHP, такая как таблица или что-то в этом роде, которая поддерживает это?

Чтобы сделать это немного понятнее, могу я взять это:

$arr = array(
    array("id" => 1, "something" => "etc"),
    array("id" => 2, "something" => "etc"),
    array("id" => 3, "something" => "etc"),
    array("id" => 4, "something" => "etc"),
    array("id" => 5, "something" => "etc"),
    ...
    array("id" => $over9000, "something" => "etc")
);

и превратите его в это:

$newarr = array(
    array("id" => 1, "different" => "etc"),
    array("id" => 2, "different" => "etc"),
    array("id" => 3, "different" => "etc"),
    array("id" => 4, "different" => "etc"),
    array("id" => 5, "different" => "etc"),
    ...
    array("id" => $over9000, "different" => "etc")
);

БЕЗ этого:

$newarr = array_map(function($i){
    return array(
        "id" => $i["id"], 
        "different" => $i["something"]
    );
}, $arr);

Мой вариант использования - получение около 70000 строк из базы данных SQL в каком-то формате, который я не могу контролировать, и необходимость сериализации его в JSON определенным образом (ключи имеют разные имена). Кажется, что просто перебрать в цикле массив всех возвращенных объектов записи и выполнить одну и ту же операцию выборочного копирования для каждого из них - огромная трата от 10 до 15 секунд.

Есть ли способ сделать это в постоянное время? Я взаимодействую с PHPADODb, чтобы получить данные из базы данных, поэтому, если у него уже есть такая структура, которая отделяет схему от данных, это было бы идеально.


person Asad Saeeduddin    schedule 19.02.2014    source источник
comment
Возможный дубликат stackoverflow.com/ questions / 2212948 / Есть шанс, что ответит на ваш вопрос?   -  person jpycoder    schedule 19.02.2014
comment
@jpycoder Я прочитал это и попытался подчеркнуть в заголовке, что я не ищу решение, которое включает итерацию по массиву. В этом весь смысл этого вопроса.   -  person Asad Saeeduddin    schedule 19.02.2014
comment
любая внутренняя функция по-прежнему будет проходить через массив   -  person    schedule 19.02.2014
comment
Массив из 70 тыс. Элементов не должен повторяться в течение 10 секунд   -  person zerkms    schedule 19.02.2014
comment
@Dagon Это принципиально не операция с линейным временем, это так только из-за деталей реализации (тип массива, который я использую в этом случае). Переименование столбца таблицы - O (1).   -  person Asad Saeeduddin    schedule 19.02.2014
comment
@Asad: Это принципиально не линейная операция времени --- есть ли причины, по которым она не линейна?   -  person zerkms    schedule 19.02.2014
comment
@zerkms SLow соединение, виртуальная машина на моем старом ноутбуке, преувеличение (на самом деле я еще не рассчитал время).   -  person Asad Saeeduddin    schedule 19.02.2014
comment
@Asad: медленное соединение с ЧТО? Вы спросили о работе с массивом. Массив хранится в памяти процесса.   -  person zerkms    schedule 19.02.2014
comment
Кстати, не могли бы вы изменить sql-запрос, чтобы он возвращал то, что вам нужно, а не какой-то мусор?   -  person zerkms    schedule 19.02.2014
comment
Если вам нужно сериализовать его в JSON и не хотите повторять массив, как насчет выполнения замены строки в результирующем JSON? (что обычно было бы последним, что я бы рекомендовал)   -  person Michael Berkowski    schedule 19.02.2014
comment
@zerkms База данных. Я загружаю страницу, это занимает около 10 секунд. Дело не в точном времени.   -  person Asad Saeeduddin    schedule 19.02.2014
comment
@Asad: если для загрузки с something требуется 10 секунд, это будет точно такое же время для загрузки с different именем столбца. Что не так с изменением запроса sql или просто изменением массива?   -  person zerkms    schedule 19.02.2014
comment
@MichaelBerkowski Я мог бы попробовать это, но не думаю, что смогу придумать достаточно безопасное регулярное выражение, чтобы избежать искажения каких-либо фактических данных. Кроме того, я не знаю, будет ли это быстрее или медленнее.   -  person Asad Saeeduddin    schedule 19.02.2014
comment
Помедленнее? Вы упомянули, что производительность здесь не обсуждается.   -  person zerkms    schedule 19.02.2014
comment
@zerkms Да, я отвечал на ваш предыдущий вопрос заглавными буквами.   -  person Asad Saeeduddin    schedule 19.02.2014
comment
Regex может понадобиться, а может и не понадобиться, в зависимости от ваших данных. Способ узнать, быстрее он или медленнее, - это попробовать и рассчитать время.   -  person Michael Berkowski    schedule 19.02.2014
comment
@zerkms Нет, я не упоминал об этом.   -  person Asad Saeeduddin    schedule 19.02.2014
comment
Дело не в точном времени. Так дело в производительности или нет? Не могли бы вы наконец решить это, пожалуйста?   -  person zerkms    schedule 19.02.2014
comment
@zerkms Может, мне следовало написать Здесь дело не в точном времени. Было ли это 10 или 6 секунд, значения не имеет.   -  person Asad Saeeduddin    schedule 19.02.2014
comment
@Asad: не будет и 6 секунд, чтобы перебрать массив из 70к элементов. Вы пытались измерить, сколько времени занимает итерация массива, или просто думаете, что ваши навыки угадывания сегодня достаточно хороши?   -  person zerkms    schedule 19.02.2014
comment
@zerkms Хорошо, спасибо за вашу помощь \   -  person Asad Saeeduddin    schedule 19.02.2014
comment
@Asad: так проблема решена?   -  person zerkms    schedule 19.02.2014
comment
Что касается других структур данных php, их нет. По крайней мере, ни одного из тех, о которых я знаю, и ни одного, который работал бы быстрее, чем массивы, встроенные в PHP. Лучший способ сделать то, что вам нужно, - это извлечь данные из БД без дополнительных описаний того, как вы это делаете, и мы не сможем вам легко помочь.   -  person John V.    schedule 19.02.2014
comment
Было бы неплохо, если бы для этого был выходной фильтр json :)   -  person Ja͢ck    schedule 19.02.2014


Ответы (1)


Есть ли способ сделать это в постоянное время?

Нет никакого способа сделать это. Элементы в массиве независимы, поэтому невозможно изменить их структуру за постоянное время.

person zerkms    schedule 19.02.2014
comment
Я предполагаю, что смещение имен столбцов решает мою проблему, хотя это по-прежнему означает, что это невозможно сделать. - person Asad Saeeduddin; 19.02.2014