为什么以下代码有效:
$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。
答案 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时,您将只获得确切的案例场景。