array_search 和销毁逻辑错误

Posted

技术标签:

【中文标题】array_search 和销毁逻辑错误【英文标题】:array_search and destroy logic error 【发布时间】:2014-02-17 02:03:26 【问题描述】:

我正在尝试搜索一个数组并查看其中是否包含一个值。如果值在数组中,则数组中值的索引将被传递到从数组中删除。

问题是如果找不到值,array_search 返回 FALSE,但由于 false 是布尔值,它也被视为 0。当它被传递给 unset 以从数组中删除值时,索引 0 处的值将是如果 array_search 返回 false,则删除。

我很确定需要将它放入 if 语句中,但如果整数和布尔值都可以返回,我将如何处理响应?

当前代码:

$pos = array_search($value, $array);
unset($array[$pos]);

【问题讨论】:

【参考方案1】:

php Doc 说..

此函数可能返回布尔值 FALSE,但也可能返回 计算结果为 FALSE 的非布尔值。请阅读关于 布尔值以获取更多信息。使用 === 运算符测试 这个函数的返回值。

所以你需要这样做

<?php
$arr = [1,2,3];
$pos = array_search(4, $arr);
if($pos!==false)

unset($arr[$pos]);

print_r($arr);

OUTPUT

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

如您所见,第一个索引被保留。

【讨论】:

【参考方案2】:

试试这个

if($pos !== false)

// do your work to unset

注意 !== 在上面的代码中

$x !== $y 如果 $x 不等于 $y 则为 True,或者它们不是同一类型

【讨论】:

【参考方案3】:

你可以试试这个脚本,希望对你有帮助...

if(in_array($value, $array))
    $pos = array_search($value, $array);
    unset($array[$pos]); 

【讨论】:

以上是关于array_search 和销毁逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章