2010-06-01 2 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 ('테스트', $의 편곡) 반환 '거짓'하지만 몇 가지 간단한 배열을 작동하십시오.

+7

그것은 정확히 가정 된 방식으로 작동합니다. 배열 $ arr에는 그러한 키가 없습니다. –

답변

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는 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를 반환 이렇게하려면, 당신은 다음과 같이 자신의 함수를 작성해야 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, 28 행의 file.php에서 예기치 않은 T_FUNCTION' – ArK