$ I—; итератор попадает в бесконечный цикл — для цикла переполнение стека

Я использую базовый for Цикл с увеличивающимися итераторами для проверки дубликатов:

$array = ['a', 'b', 'c', 'c', 'c', 'd'];

for ($i = 0; $i < $length-1; $i++) {
if ($array[$i] == $array[$i + 1]) {
//delete $array[$i + 1]
$i--;
}
}

Я хотел бы сравнить все элементы со следующим в массиве. Если есть дубликат, у меня есть вспомогательная функция, чтобы удалить его, но затем хочу сбросить $i назад, чтобы сравнить его снова со следующим элементом после того, который был удален с помощью $i--;, Однако, когда я делаю это, я застреваю в бесконечном цикле. Кто-нибудь знает как это решить?

0

Решение

Вы уменьшаете $i после увеличения, так что он всегда будет переключаться между 0 а также 1,

В PHP есть функция для того, что вы пытаетесь сделать: array_unique ()


$array = ['a', 'b', 'c', 'c', 'c', 'd'];

$last = $array[0];
for ($i = 1; $i < count($array); $i++) {
if ($array[$i]==$last) {
unset($array[$i]); // delete element
}
else $last = $array[$i]; // remember value
}

var_dump($array);

производит

array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [5]=> string(1) "d" }
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]