Php 数组搜索可以';找不到明显存在的元素
为什么以下代码可以工作:Php 数组搜索可以';找不到明显存在的元素,php,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 = 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\u fetch\u数组($result,mysql\u两者)中使用了一个混合数组,并获取了搜索所需的密钥,那么您将无法进行搜索-它将永远不会超过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);
尝试执行
array\u搜索('test4',$test,TRUE)代码>。第三个参数告诉它在比较时使用==
而不是=
由于数组同时包含字符串和数字,当它与0
(第一个元素)进行比较时,它将'test4'
转换为一个数字(它在第一个非数字字符处停止),并且恰好匹配
我的意思是:'test4'==0
=>0==0
=>true
当您将TRUE
作为第三个参数传递时,它将使用==
,并且'test4'==0
将自动false
,因为类型不匹配,所以不会进行转换。您不能搜索数字以获得字符串,也不能期望得到好的结果
我的猜测是,它将值视为一个数字,因此它会将字符串转换为一个数字(它不能),从而将字符串转换为0。所以0的值等于搜索字符串,搜索字符串也等于0,这就是结果
如果该值为1,则当搜索字符串转换为0时,该值将不匹配(因为无法将字符串转换为数字),因此在以下情况下该值将不匹配
$test=数组(0=>1,'field0'=>test2',1=>test3','field1'=>test4')
只有当数组中的值为0时,您才能得到确切的案例场景。我在手册中看到了这一点,但没有充分意识到它可以解决这个问题,所以非常感谢。帮了大忙。