false数组和0数组之间的混淆


Confusion between false and 0 arrays

基本上我有以下代码:

unset($items[array_search($i,$items)]);

当找不到关键字时,array_search返回false,这相当于返回0,如果找不到项值,则会导致删除数组的元素0。

有什么解决办法吗?

$itemindex = array_search($i,$items);
if ($itemindex !== false) {
  unset($items[$itemindex]);
}

使用单独的变量和严格的比较,只有在实际从数组中找到项时,才会运行unset()。使用!==与false的比较可以避免将false与0混淆,因为0也是array_search调用的有效返回值,在这种情况下,我们确实希望运行unset()。

if(($i = array_search($i,$items)) !== false) { 
    unset($items[$i]) 
}

是一种可能的解决方法。

array_search返回包含该值的(第一个)键,如果不存在该值,则返回false。这意味着您需要在调用unset之前检查false,如下所示:

$ix = array_search($i,$items)
if($ix !== false) {
    unset($items[$ix]);
}