Как мне переиндексировать массив после использования unset ()? - PullRequest
0 голосов
/ 01 августа 2010

У меня небольшие проблемы с потерей порядка в массиве после использования unset(). Это код, который я использую.

$id = $_GET['id'];
for ($i = 0; $i < count($my_array); $i++) {
  if ($my_array[$i] == $id) {
    unset($my_array[$i]);
  }
}

Предположим, что $my_array имеет 4 элемента, а $my_array[1] равно $id. После того как я сбросил это, я включаю $my_array и получаю ошибку Undefined Offset: 1 С print_r($my_array) я получаю $my_array[0], $my_array[2] и $my_array[3].

Я прекрасно понимаю, почему это происходит. Есть ли способ переиндексировать массив так, чтобы элемент 2 «сбрасывался» до элемента 1, а остальные элементы соответственно до конца массива?

Что-то вроде reindex($my_array) будет сладким. Я знаю, что мог бы запустить другой цикл for с новым массивом и передать их вручную, но одношаговое решение было бы здорово. Я просто нигде не мог найти.

Ответы [ 2 ]

2 голосов
/ 01 августа 2010

Вызовите array_values, чтобы переиндексировать массив.

0 голосов
/ 04 декабря 2013

Я только что обнаружил, что вы также можете сделать

 array_splice($ar, 0, 0);

Это делает реиндексацию на месте, поэтому вы не получите копию исходного массива.

...