我有这个数组:
$ar = [ 'key1'=>'John', 'key2'=>0, 'key3'=>'Mary' ];
,如果我写:
$idx = array_search ('Mary',$ar);
echo $idx;
我明白了:
key2
我在网上搜索过,这不是隔离问题。似乎当关联数组包含0值时,如果未设置strict参数,则array_search将失败。
还有不止一个bug warnings,所有被拒绝的动机:“array_search()默认情况下进行宽松的比较”。
好的,我使用严格的参数来解决我的小问题...
但我的问题是:在松散比较'Mary'==0
或'two'==0
或者只是另一个PHP疯狂时,有一个体面的,有效的理由?
答案 0 :(得分:10)
您需要将第三个参数设置为true
才能使用严格比较。请看下面的解释:
array_search
正在使用==
来比较搜索期间的值
FORM PHP DOC
如果第三个参数strict设置为TRUE,那么array_search()函数将在haystack中搜索相同的元素。这意味着它还将检查大海捞针中的针的类型,并且对象必须是同一个实例。
第二个元素是0
在搜索过程中字符串被转换为0
简单测试
var_dump("Mary" == 0); //true
var_dump("Mary" === 0); //false
解决方案使用strict
选项搜索相同的值
$key = array_search("Mary", $ar,true);
^---- Strict Option
var_dump($key);
<强>输出强>
string(4) "key3"
答案 1 :(得分:4)
数组中有一个0(零)数值,默认情况下array_search()
执行非严格比较(==)。 0 == 'Mary'
为真,您应将第3个参数传递给array_search()
(true)。
答案 2 :(得分:-1)
您只需在'key2'=>'0'
中的数组中输入单词或双引号
$ar = [ 'key1'=>'John', 'key2'=>'0', 'key3'=>'Mary' ];
这很好用
答案 3 :(得分:-1)
$ar = [ 'key1'=>'John', 'key2'=>'0', 'key3'=>'Mary' ];