Мой массив выглядит так:
array(
0 => 'val',
2 => 'val',
3 => 'val',
5 => 'val',
7 => 'val'
);
Как я могу сбросить ключи, чтобы они шли как 0, 1, 2, 3, 4
?
Мой массив выглядит так:
array(
0 => 'val',
2 => 'val',
3 => 'val',
5 => 'val',
7 => 'val'
);
Как я могу сбросить ключи, чтобы они шли как 0, 1, 2, 3, 4
?
Используйте array_values:
$reindexed_array = array_values($old_array);
array_splice($old_array, 0, 0);
Он не будет сортировать массив и не будет создавать второй массив
Используя sort($array);
См. документацию по PHP здесь.
Я бы рекомендовал sort
over array_values
, так как он не будет создавать второй массив. В следующем коде у вас теперь есть два массива, занимающих пространство: $reindexed_array и $old_array. Ненужные.
$reindexed_array = array_values($old_array);
array_splice($jam_array, 0, count($jam_array));
Для сортировки массива с отсутствующими промежуточными индексами с счетом заказ более безопасен. Таким образом, 0
- это первый индекс, а count($jam_array)
или sizeof($jam_array)
возвращает десятичную позицию массива, а именно последний индекс.
Начиная с 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