array_diff & перенумерация числовых ключей - PullRequest
6 голосов
/ 04 марта 2010
(I'm a beginner)

Мой скрипт использует стандарт

$c = 0;
$t = count($array);

while ($c < $t) {
  $blah = $array[$c];
  ++$c;
}

довольно широко. Но я просто столкнулся с ситуацией, когда мне также нужно array_diff, и все это чертовски разбивается, потому что теперь у цифровых клавиш есть пробелы. Я получаю Undefined offset ошибок повсюду.

Как мне сбросить числовые ключи массива? Порядок объектов в массиве не имеет значения.

Ответы [ 3 ]

27 голосов
/ 04 марта 2010

Для сброса ключей вы можете использовать array_values():

$array = array_values($array);
8 голосов
/ 04 марта 2010

Вам не нужно сбрасывать ключи вашего массива: вам нужно изменить способ, которым вы проходите через него.

Вместо использования цикла while и доступа к элементам массива по индексу, вы должны использовать цикл foreach, который будет получать только элементы из массива:

foreach ($array as $key => $value) {
    // $key contains the index of the current element
    // $value contains the value of the current element
}
2 голосов
/ 04 марта 2010

Спасибо, Тату.

Для лулзов, Я поделюсь с вами следующим идиотским хаком, который я использовал, ожидая разумного ответа:

$badArray = array_diff($allData, $myData);

$string = implode(",",$badArray);

$dump = explode(",",$string);

$goodArray = $dump;

работал. Я чувствовал себя грязным, но это сработало.

...