Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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 数组\u密钥\u存在不起作用_Php_Arrays_Array Key - Fatal编程技术网

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;
}