Пытается удалить пустые значения из массива вроде этого. Он пропускает один ключ каждый раз, когда я использую unset(). Я знаю, что может быть лучший способ выполнить задачу, но мне нужно знать, почему в текущем коде отсутствует один из ключей?Использование unset() при итерации по массиву для удаления пустых значений
$values_arr = array(
0 => "Text",
1 => "",
2 => "",
3 => "Text",
4 => "",
5 => "Text"
);
Работы в теории
for ($i = 0; $i < count($values_arr); $i++) {
if (empty($values_arr[$i])) {
echo "<br> Blank key found " . $i . ", value was >" . $values_arr[$i] . "<";
//Unset commented out
//unset($values_arr[$i]);
}
}
var_dump($values_arr);
Выход
Blank key found 1, value was ><
Blank key found 2, value was ><
Blank key found 4, value was ><
array (size=6)
0 => string 'Text' (length=4)
1 => string '' (length=0)
2 => string '' (length=0)
3 => string 'Text' (length=4)
4 => string '' (length=0)
5 => string 'Text' (length=4)
Unset не работает
for ($i = 0; $i < count($values_arr); $i++) {
if (empty($values_arr[$i])) {
echo "<br> Blank key found " . $i . ", value was >" . $values_arr[$i] . "<";
unset($values_arr[$i]);
}
}
var_dump($values_arr);
Выход
Blank key found 1, value was ><
Blank key found 2, value was ><
array (size=4)
0 => string 'Text' (length=4)
3 => string 'Text' (length=4)
4 => string '' (length=0)
5 => string 'Text' (length=4)
Почему ключ 4 не снята с охраны?
Любая идея, почему другой не работает, мне нужно, чтобы понять, что более найти рабочий код. –
@RomanToasov Ваша версия не работает, потому что в вашем цикле for вы используете счет в состоянии! Поэтому, если вы отменили индекс 2, он не достигнет индекса 4 и не будет отменен! Поэтому вам нужно будет присвоить значение счета перед тем, как перейти в цикл for! – Rizier123
Блестящий! Я забыл, что среднее выражение для() оценивает каждый цикл не один раз. «В начале каждой итерации вычисляется expr2». http://php.net/manual/en/control-structures.for.php –