Этот код работает так, как ожидалось, и удаляет элемент массива, когда значение имеет значение 5 или 10. Но оно работает только тогда, когда у меня есть 1 значение, равное 5 или 10 в массиве ,array_splice() не работает должным образом внутри цикла
Если у меня есть более 1 значения, которое равно 5 или 10, оно удаляет только 1 из них и оставляет другие элементы в массиве.
Мой код:
for($i = 0; $i <= 10; $i++) {
if($somevar[$i] == 5 || $somevar[$i] == 10) {
echo 'the sumvar'.$somevar[$i].' exists<br>';
array_splice($somevar, $i, 1);
}
}
В качестве примера, если у меня есть: [3, 5, 4]
результат, как и ожидалось: [3, 4]
. Но если у меня есть массив вроде: [3, 5, 10, 4]
, он просто удаляет 5, но не 10: [3, 10, 4]
.
Я не могу найти, что я делаю неправильно, и почему мой код работает не так, как ожидалось?
Если вы используете 'array_splice()', как это будет удалить элемент массива и переиндексирован массив. Поэтому, если вы удалите 5 с помощью ключа 0, вы перейдете к 1 с помощью своего цикла, но массив будет переиндексирован на: '[0 => 10, 1 => 6]', и вы пропустите 10, потому что вы не идете назад к 0. Так что просто используйте 'unset()' и переиндексируйте массив после него с помощью 'array_values ()'. Также, если вы просто хотите отфильтровать 10 и 5, используйте 'array_filter()' – Rizier123
, это кажется бесконечным циклом? –
За неверный контур петли. Используйте '$ i == 10' один' = 'присваивает значение, а не тестируя значение – RiggsFolly