Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组搜索可以';找不到明显存在的元素_Php - Fatal编程技术网

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时,您才能得到确切的案例场景。

我在手册中看到了这一点,但没有充分意识到它可以解决这个问题,所以非常感谢。帮了大忙。