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() 会返回啥?
有没有办法在销毁链表时取消引用 nullptr 时停止接收异常错误?
Terraform:尝试销毁 EKS 集群时出现“错误:删除 S3 存储桶时出错”