PHP 的 array_shift 是將 Array 的 Value 一個一個取出來並移除(從小到大取值)
但是遇到一個奇怪的問題,若值遇到0,之後的值就全部不見了~
例如:
$stack = ['orange', 0, 'apple', 'raspberry'];
while ($v = array_shift($stack)) {
echo $v . ' '; // 印出 orange 後,就不會在印任何值
}
註:0、false 都是一樣情況
PHP array_shift 遇到 0 與 false 會中斷
看起來應該是 array_shift() 遇到 value 是 0 或 false,程式就會結束~
<?php
$stack = ['orange', false, 'apple', 'raspberry'];
// $stack 裡面的值若有 0 或 false,後面的值就都不會執行
// 靠 array_filter 把 val = 0 和 false 過濾掉
$stack = array_filter($stack, function($val) {
return $val !== 0 && $val !== false && $val !== '0';
});
// 這樣子就可以正確印出
while ($v = array_shift($stack)) {
echo $v . ' '; // orange, apple, raspberry
}
?>