Подтвердить что ты не робот

Как переиндексировать массив?

Мой массив выглядит так:

array(
  0 => 'val',
  2 => 'val',
  3 => 'val',
  5 => 'val',
  7 => 'val'
);

Как я могу сбросить ключи, чтобы они шли как 0, 1, 2, 3, 4?

4b9b3361

Ответ 1

Используйте array_values:

$reindexed_array = array_values($old_array);

Ответ 2

array_splice($old_array, 0, 0);

Он не будет сортировать массив и не будет создавать второй массив

Ответ 3

Используя sort($array);

См. документацию по PHP здесь.

Я бы рекомендовал sort over array_values, так как он не будет создавать второй массив. В следующем коде у вас теперь есть два массива, занимающих пространство: $reindexed_array и $old_array. Ненужные.

$reindexed_array = array_values($old_array);

Ответ 4

array_splice($jam_array, 0, count($jam_array));

Для сортировки массива с отсутствующими промежуточными индексами с счетом заказ более безопасен. Таким образом, 0 - это первый индекс, а count($jam_array) или sizeof($jam_array) возвращает десятичную позицию массива, а именно последний индекс.

Ответ 5

Начиная с PHP7.4, вы можете переиндексировать без вызова функции, распаковав значения в массив с помощью оператора splat. Считайте это "переупаковкой".

Код: (Демонстрация)

$array = array(
  0 => 'val',
  2 => 'val',
  3 => 'val',
  5 => 'val',
  7 => 'val'
);

$array = [...$array];

var_export($array);

Выход:

array (
  0 => 'val',
  1 => 'val',
  2 => 'val',
  3 => 'val',
  4 => 'val',
)

Примечание: этот метод НЕ работает с ассоциативными ключами (оператор сплат дросселирует их). Нецифровое демо

О поломке сообщается как о невозможности распаковать строковые ключи, но было бы точнее сказать, что все ключи должны быть числовыми. Integer as string demo и Float demo