array_search无法找到明显存在的元素

时间:2014-10-06 18:13:13

标签: php

为什么以下代码有效:

$test = array(0=>'test1','field0'=>'test2',1=>'test3','field1'=>'test4');
echo array_search('test4',$test);

但是以下没有:

$test = array(0=>0,'field0'=>'test2',1=>'test3','field1'=>'test4');
echo array_search('test4',$test);

如果你有一个来自mysql_fetch_array($ result,MYSQL_BOTH)的混合数组,并且拿了你需要搜索的键,你就不可能 - 它永远不会超过0。

3 个答案:

答案 0 :(得分:3)

尝试array_search('test4',$test, TRUE);。第3个参数告诉它在比较时使用===而不是==

由于您的数组同时包含字符串和数字,因此当它与0(第1个元素)进行比较时,会将'test4'转换为数字(在第1个非数字字符处停止)并且碰巧匹配。

我的意思是:'test4' == 0 => 0 == 0 => true

当您将TRUE作为第3个参数传递时,它会使用===,而'test4' === 0会自动false,因为类型不匹配,没有转换。

答案 1 :(得分:0)

解决方案=将0值强制为字符串:

$test = array(0=>0,'field0'=>'test2',1=>'test3','field1'=>'test4');
foreach ($test as $k=>$v){ $test[$k] = (string) $v; }
echo array_search('test4',$test);     

答案 2 :(得分:0)

您无法在数字中搜索字符串并期望获得良好的结果。

我的猜测是它将值视为数字,因此它将您的字符串转换为数字(它不能),以便将字符串转换为0.因此0的值等于搜索字符串,这也是等于0,这就是你的结果。

如果值为1,则它将不匹配,因为搜索字符串转换为0(因为您无法将字符串转换为数字),因此它在下面不匹配。

$ test = array(0 => 1,'field0'=>'test2',1 =>'test3','field1'=>'test4');

当数组中的值为0时,您将只获得确切的案例场景。