2013-09-23 6 views
1

여러 키를 눌러 I 다음과 같은 배열이 있습니다배열이 배열 또는 문자열

$array = array('23' => array('19' => array('7' => array('id' => 7, 'name' => 'John Doe')))); 

Array 
(
    [23] => Array 
     (
      [19] => Array 
       (
        [7] => Array 
         (
          [id] => 7 
          [name] => John Doe 
         ) 

       ) 

     ) 

) 

내가 하위 요소에 액세스하려면 내가 그 23 19 7 자신의 서브 키를 알고있다. 나는 간단한 형식

echo $array['23']['19']['7']['name']; // John Doe 

하여이 작업을 수행 할 수 있습니다 그러나 이러한 배열은 불과 3 수준이이 다를 수 있습니다, 더 많거나 이하. 배열 unlimited level을 만들어야합니다.

$keys = array('23', '19', '7'); 

echo $array[$keys]['name']; 

을 물론 내가 Warning: Illegal offset type in 오류가 발생했습니다 :

나는 내가 다음 코드로 원하는 같은 것을 시도했다.

그럼 나는이 일을 시도하지만 난 모든 요소 얻을 couldnt한다 :

function brackets($str) { 
    return sprintf("['%s']", $str); 
} 

$keys = array('23', '19', '7'); 
$string_key = implode('', array_map('brackets', $keys)); // ['23']['19']['7'] 

echo $array{$string_key}['name']; 

답변

1

당신은 당신이 키 배열을 호출 할 수있는 기능을 만들 수 있습니다.

function getArrayPathVal($arr, $path){ 

    if(!is_array($path)) 
     return $arr[$path]; 

    $curr = $arr; 
    foreach($path as $key) 
    { 
     if(!$curr[$key]) 
      return false; 

     $curr = $curr[$key]; 
    } 

    return $curr; 
} 


$array = array('23' => array('19' => array('7' => array('id' => 7, 'name' => 'John Doe')))); 
$keys = array('23', '19', '7'); 

$res = getArrayPathVal($array, $keys); 
print $res['name']; //Prints 'John Doe' 
1

당신은 재귀 함수 시도 할 수 :

function getByKeys ($arr, $keys) { 
    if (count($keys) == 0) 
    return $arr; 
    $key = array_shift ($keys); 
    return getByKeys ($arr[$key], $keys); 
} 

$array = array('23' => array('19' => array('7' => array('id' => 7, 'name' => 'John Doe')))); 
echo getByKeys ($array, array('23', '19', '7')); 

이 안된,하지만 개념은 트릭을 수행해야합니다

  1. 다음 키를 검색 배열
  2. 에 적용 할
  3. 그 키로 표시된 하위 배열을 사용하는 다음 반복
  4. 더 이상 키가 없을 경우 중지 적용될 수 있습니다.