У меня есть следующий массив, который я хотел бы переиндексировать, чтобы ключи поменялись местами (в идеале, начиная с 1):
Текущий массив ( правка: массив на самом деле выглядит так):
Array (
[2] => Object
(
[title] => Section
[linked] => 1
)
[1] => Object
(
[title] => Sub-Section
[linked] => 1
)
[0] => Object
(
[title] => Sub-Sub-Section
[linked] =>
)
)
Как это должно быть:
Array (
[1] => Object
(
[title] => Section
[linked] => 1
)
[2] => Object
(
[title] => Sub-Section
[linked] => 1
)
[3] => Object
(
[title] => Sub-Sub-Section
[linked] =>
)
)
Ответы:
Если вы хотите переиндексировать, начиная с нуля, просто сделайте следующее:
Если вам нужно, чтобы начать с одного, то используйте следующее:
Вот справочные страницы для используемых функций:
array_values()
array_combine()
range()
источник
array_values
возвращает копию массива. Так что, если у вас есть ссылки на массив,array_splice
было бы лучше. Смотрите решение @imagiro.array_values()
его работать, если вы все время начинаете с индекса 0.Вот лучший способ :
это возвращает
делая это
Вы получаете это
объяснение
array_values()
Возвращает значения входного массива и численно индексирует.array_filter()
: Фильтрует элементы массива с помощью пользовательской функции (UDF. Если ничего не указано , все записи во входной таблице со значением FALSE будут удалены .)источник
array_filter()
кажется совершенно не относящимся к данным выборки.Я только что узнал, что вы также можете сделать
Это делает реиндексацию на месте, так что вы не получите копию исходного массива.
источник
Почему переиндексация? Просто добавьте 1 к индексу:
Редактировать После того, как вопрос прояснен: вы можете использовать
array_values
для сброса индекса, начиная с 0. Затем вы можете использовать алгоритм выше, если вы просто хотите, чтобы напечатанные элементы начинались с 1.источник
Что ж, я хотел бы думать, что для любой вашей конечной цели вам на самом деле не нужно изменять массив, чтобы он был основан на 1, а не на 0, но вместо этого мог бы обрабатывать его во время итерации, как написал Гамбо.
Однако , чтобы ответить на ваш вопрос, эта функция должна преобразовать любой массив в версию на основе 1
РЕДАКТИРОВАТЬ
Вот более многоразовая / гибкая функция, если хотите
источник
Это будет делать то, что вы хотите:
источник
Вы можете подумать, почему вы вообще хотите использовать массив на основе 1. Массивы на основе нуля (при использовании неассоциативных массивов) довольно стандартны, и если вы хотите выводить данные в пользовательский интерфейс, большинство из них справится с решением, просто увеличив целое число при выводе в пользовательский интерфейс.
Подумайте о согласованности - как в вашем приложении, так и в коде, с которым вы работаете, - когда думаете об основанных на 1 индексаторах для массивов.
источник
Более элегантное решение:
источник
Вы можете переиндексировать массив, чтобы новый массив начинался с индекса 1, как здесь;
Выход из вышесказанного есть;
источник
array_values
здесь. Смотри мой ответ.Подобно @monowerker, мне нужно было переиндексировать массив, используя ключ объекта ...
Это привело к:
источник
источник
Если вы не пытаетесь переупорядочить массив, вы можете просто сделать:
$ array = array_reverse ($ array);
$ array = array_reverse ($ array);
Массив array_reverse очень быстрый и меняет порядок при обратном. Кто-то еще показал мне это давным-давно. Так что я не могу взять кредит за то, что придумал это. Но это очень просто и быстро.
источник
Подобно вкладу Ника, я пришел к тому же решению для переиндексации массива, но немного улучшил функцию, поскольку в PHP версии 5.4 она не работает из-за передачи переменных по ссылке. Пример функции переиндексации в таком случае выглядит следующим образом
use
:источник
Вот моя собственная реализация. Ключи во входном массиве будут перенумерованы с приращением ключей, начиная с $ start_index.
источник
Просто сделайте это:
источник
Вы можете легко сделать это после совместного использования функций array_values () и array_filter () для удаления пустых элементов массива и переиндексации из массива в PHP.
Функция array_filter () Функция PHP array_filter () удаляет пустые элементы массива или значения из массива в PHP. Это также удалит пустые, нулевые, ложные, 0 (ноль) значения.
Функция array_values () Функция PHP array_values () возвращает массив, содержащий все значения массива. Возвращенный массив будет иметь числовые ключи, начиная с 0 и увеличиваясь на 1.
Удалить пустые элементы массива и переиндексировать
Сначала давайте посмотрим на вывод массива $ stack:
Вывод:
В приведенном выше выводе мы хотим удалить пустые, нулевые, 0 (нулевые) значения и затем переиндексировать элементы массива. Теперь мы будем использовать функции array_values () и array_filter (), как в следующем примере:
Вывод:
источник
array_filter()
кажется совершенно не относящимся к образцу данных ОП.Удаление дубликатов и переиндексация массива:
источник
array_filter()
кажется совершенно не относящимся к образцу данных ОП.Самый быстрый способ, который я могу придумать
И если вы просто хотите переиндексировать массив (с нуля) и у вас есть PHP +7.3, вы можете сделать это следующим образом
Я считаю,
array_unshift
что лучше, чем,array_values
поскольку первый не создает копию массива.источник
Такое ощущение, что все
array_combine()
ответы копируют одну и ту же «ошибку» (ненужный вызовarray_values()
).array_combine()
игнорирует ключи обоих параметров, которые он получает.Код: ( Демо )
Вывод:
источник
Сортировка - это всего лишь сортировка () , переиндексация кажется немного глупой, но если это необходимо, это сделает это. Хотя не на месте. Используйте array_walk (), если вы будете делать это в нескольких местах, просто используйте цикл for-key-value, если это одноразовая операция.
источник
Если все в порядке, чтобы создать новый массив, это так:
Если вам нужно развернуть на месте, вам нужно запустить в обратном направлении, чтобы не топать по нужным вам индексам:
источник
array_values()
получение массива на основе 0, а затем внесение некоторых корректировок в этот результат, если действительно требуется массив на основе 1 .