2010-06-01 60 views
7

array_key_exists不適用於大型多維數組。例如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',但它適用於一些簡單的數組。

+7

它的工作方式與它應該的一樣 - 數組$ arr沒有這樣的密鑰。 – 2010-06-01 10:31:03

回答

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

array_key_exists不適用於多維數組。如果你想這樣做,你必須寫自己的函數是這樣的:

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)如果找到它。

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

這需要PHP 5.3或更高版本。

+0

表示在函數($ v,$ k)使用(&$ test_found)時出錯並且msg是'Parse error:syntax error,unexpected T_FUNCTION in file.php on line 28' – ArK 2010-06-01 10:49:04