我有这个数组:
$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(使用前将#替换为@)