array_search可以';我找不到明显存在的元素


array_search can't find element which is clearly there

为什么以下代码有效:

$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时,您才能得到确切的情况。