为什么以下代码有效:
$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。
尝试执行array_search('test4',$test, TRUE);
。第三个参数告诉它在比较时使用===
而不是==
。
由于数组同时包含字符串和数字,因此当它与0
(第一个元素)进行比较时,它会将'test4'
转换为数字(它停在第一个非数字字符处),并且恰好匹配。
我的意思是:'test4' == 0
=>0 == 0
=>true
。
当您将TRUE
作为第三个参数传递时,它将使用===
,而'test4' === 0
自动为false
,因为类型不匹配,因此没有转换。
解决方案=强制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);
您不能在数字中搜索字符串并期望得到好的结果。
我的猜测是,它把值看作一个数字,所以它把字符串转换成一个数字(它不能),这样字符串就可以转换成0。所以0的值等于搜索字符串,也等于0,这就是结果。
如果值为1,它将不匹配,因为搜索字符串将转换为0(因为您无法将字符串转换为数字),因此它在以下情况下不匹配。
$test=数组(0=>1,'field0'=>'test2',1=>'test3','field1'=>'test4');
只有当数组中的值为0时,您才能得到确切的情况。