Php 数组\u密钥\u存在不起作用
数组\键\存在不适用于大型多维数组。前Php 数组\u密钥\u存在不起作用,php,arrays,array-key,Php,Arrays,Array Key,数组\键\存在不适用于大型多维数组。前 $arr = array( '1' => 10, '2' => array( '21' => 21, '22' => 22, '23' => array( 'test' => 100, '231' => 231 ), ), '3' => 30, '4' =&g
$arr = array(
'1' => 10,
'2' => array(
'21' => 21,
'22' => 22,
'23' => array(
'test' => 100,
'231' => 231
),
),
'3' => 30,
'4' => 40
);
array_key_exists('test',$arr)返回'false',但它适用于一些简单数组。array_key_exists不适用于多维AML数组。如果要这样做,您必须编写自己的函数,如下所示:
function array_key_exists_multi($n, $arr) {
foreach ($arr as $key=>$val) {
if ($n===$key) {
return $key;
}
if (is_array($val)) {
if(multi_array_key_exists($n, $val)) {
return $key . ":" . array_key_exists_multi($n, $val);
}
}
}
return false;
}
如果找不到键,则返回
false
,如果找到键,则返回包含该数组中键“位置”的字符串(如2:23:test
)。数组\u key\u exists不能递归工作(如前所述)。请参阅PHP手册,您可以使用以下内容执行递归搜索:
<?php
function array_key_exists_r($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) return $result;
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_r($needle, $v);
}
if ($result) return $result;
}
return $result;
}
这需要PHP5.3或更高版本。这里是另一个,适用于任何维度数组
function findValByKey($arr , $keySearch){
$out = null;
if (is_array($arr)){
if (array_key_exists($keySearch, $arr)){
$out = $arr[$keySearch];
}else{
foreach ($arr as $key => $value){
if ($out = self::findValByKey($value, $keySearch)){
break;
}
}
}
}
return $out;
}
它的工作方式与预期完全相同-数组$arr没有这样一个键。表示函数($v,$k)use(&$test_found)有错误,msg是“Parse error:syntax error,file.php中的意外T_函数,在第28行”
function findValByKey($arr , $keySearch){
$out = null;
if (is_array($arr)){
if (array_key_exists($keySearch, $arr)){
$out = $arr[$keySearch];
}else{
foreach ($arr as $key => $value){
if ($out = self::findValByKey($value, $keySearch)){
break;
}
}
}
}
return $out;
}