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 和销毁逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章

[PHP]:如果没有找到,array_search() 会返回啥?

销毁 DataTable 时出现 IE 错误

有没有办法在销毁链表时取消引用 nullptr 时停止接收异常错误?

Terraform:尝试销毁 EKS 集群时出现“错误:删除 S3 存储桶时出错”

jquery 数据表:“未捕获的类型错误:无法读取未定义的属性‘长度’”在销毁和重新初始化后。表作为数据源

在相关模型更新销毁之前,错误不会传播