array_key_exists不起作用

时间:2010-06-01 10:27:00

标签: php arrays array-key

array_key_exists不适用于大型多维数组。对于前

$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'但它适用于一些简单的数组。

4 个答案:

答案 0 :(得分:12)

array_key_exists不起作用递归(已经指出Matti Virkkunen)。看一下PHP手册,您可以使用以下piece of code来执行递归搜索:

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

答案 1 :(得分:2)

array_key_exists不适用于multidimensionaml数组。如果你想这样做,你必须编写自己的函数:

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,或者如果找到该字符串,则返回包含该数组中密钥“location”的字符串(如2:23:test)。

答案 2 :(得分:2)

$test_found = false;
array_walk_recursive($arr,
                     function($v, $k) use (&$test_found)
                     {
                         $test_found |= ($k == 'test');
                     });

这需要PHP 5.3或更高版本。

答案 3 :(得分:0)

这是另一种,适用于任何维度数组

return current != NULL;