嘗試從此數組中刪除空值。它每次使用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)
取消設置不工作
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是不是取消設置?
任何想法,爲什麼其他人不工作,我需要了解更多的比找到一個工作代碼。 – 2014-11-21 04:10:43
@RomanToasov你的版本不工作,因爲你在for循環中使用條件!因此,如果您取消設置了2個索引,則索引不會達到索引4,也不會取消設置!所以你必須在進入for循環之前分配計數值! – Rizier123 2014-11-21 04:23:10
輝煌!我忘了中間表達式是()不是隻對一次循環進行評估。 「在每次迭代開始時,評估expr2。」 http://php.net/manual/en/control-structures.for.php – 2014-11-21 04:26:14