array_search 返回错误的键[重复]

2024-04-27

我有这个数组:

$ar = [ 'key1'=>'John', 'key2'=>0, 'key3'=>'Mary' ];

并且,如果我写:

$idx = array_search ('Mary',$ar);
echo $idx;

I get:

key2

我在网上搜索过,这不是孤立的问题。似乎当关联数组包含 0 值时,如果未设置 strict 参数,则 array_search 会失败。

也有不止一个错误警告 https://bugs.php.net/bug.php?id=65844,都被动机拒绝:“array_search() 默认情况下进行松散比较”。

好吧,我使用严格的参数解决了我的小问题......

但我的问题是:有一个体面的、有效的理由为什么要进行松散的比较'Mary'==0 or 'two'==0 http://grokbase.com/t/php/php-bugs/141vp9f59k/php-bug-bug-66583-new-array-search-always-returns-0-for-string-elements-for-a-mixed-type-array或者这只是另一种 php 疯狂?


你需要设置第三个参数 as true使用严格比较。请看下面的解释:

array_search正在使用==在搜索过程中比较值

形成 PHP 文档

如果第三个参数 strict 设置为 TRUE,则 array_search() 函数将在干草堆中搜索相同的元素。这意味着它还会检查大海捞针的类型,并且对象必须是同一实例。

因为第二个元素是0字符串被转换为0搜索期间

简单测试

var_dump("Mary" == 0); //true
var_dump("Mary" === 0); //false

溶液使用strict搜索相同值的选项

$key = array_search("Mary", $ar,true);
                                  ^---- Strict Option
var_dump($key);

Output

string(4) "key3"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

array_search 返回错误的键[重复] 的相关文章

随机推荐