2016-10-16 2 views
1
에 Multidimentional 배열의 키의 배열에 대한 변수를 사용

I 배열, $의 json_data, 나는 for 루프와 구문 분석을 시도하고 있습니다는 PHP

array(2) { 
    ["data"]=> 
    array(4) { 
     ["children"]=> 
     array(25) { 
      [0]=> 
      ["first_key"]=> 
      array(50) { 
       ["second_key"]=> 
       string(9) "My Title" 
      } 
     } 
    } 
} 
:

이 배열이다

그런 다음 PHP에, 나는 $ json_data으로이 설정

foreach ($json_data['data']['children'] as $key => $value) { 
    echo $title = $value['first_key']['second_key']; 
} 

출력 "내 제목은"예상대로 for 루프와 외부로 데이터를 당겨 시작합니다.

내 질문 (및 내 질문에 가난하게 말한 경우 알려주십시오.), 변수로 키를 설정할 수 있습니까? 내가 문자열로 설정 할 수 없다는 것을 알고,하지만 난 같은 $ 값으로 키 배열을 전달할 수 있습니다 그런

$key_array = array('first_key' => array('second_key')); 

foreach ($json_data['data']['children'] as $key => $value) { 
    echo $title = $value[$key_array]; 
} 

또는 뭔가? 나는 또한처럼 잘 될 것 $ key_array 세트가 함수에 $ 배열을 전달할 수있는에 함수 만들기

:

에코 get_array_value ($ 배열, $ array_keys을);

하지만 올바른 방향으로 밀려 오는 소리를 좋아할 것입니다. 모든

+0

어레이에서 데이터를 얻을해야합니까? 너 뭐하려고? – user2182349

+0

예, 따라서 질문;). 배열을 만들기 전에 "경로"를 올바른 키/값 쌍으로 설정하고 싶습니다. –

+0

항상 같은 경로입니까? – user2182349

답변

2

우선 여기를 참조 :

$key_array = array('first_key' => array('second_key')); 

대신 키의 다차원 배열을 선언, 그 값이 같은 원래 배열 $json_data에서 인출 할 모든 키 구성된 간단한 배열을 선언 :

$array_keys = array('second_key', 'another_key'); 

그리고 두 번째 질문에서 :

으로 만들기 나는 또한처럼 잘 될 것 $key_array 세트가 함수에 $array을 통과 할 수있는에 기능 :

echo get_array_value($array, $array_keys); 

네, 확실히 가능하다.

  • 함수 get_array_value() 쓰기 원래 배열 $json_data이 기능 키 $array_keys 배열을 건네 것이다용액.
  • 배열을 통해 루프 할 get_array_value() 함수 안에 루프 foreach 함수를 만듭니다. 루프의 각 반복에서 다른 재귀 유틸리티 함수 get_array_value_utility()을 호출하십시오.
  • get_array_value_utility() 함수는 배열을 순환하여 루프에서 필요한 값을 가져옵니다.

여기 코드입니다 :

여기
function get_array_value_utility($array, $key){ 
    foreach($array as $k => $v){ 
     if($key == $k){ 
      return $v; 
     }else if(is_array($v)){ 
      $v = get_array_value_utility($v, $key); 
      if ($v != null) return $v; 
     } 
    } 
} 

function get_array_value($array, $array_keys){ 
    $values = array(); 
    foreach($array_keys as $key){ 
     $values[] = get_array_value_utility($array, $key); 
    } 
    return $values; 
} 

$array_keys = array('second_key', 'another_key'); 
$values = get_array_value($json_data, $array_keys); 

// display $values array 
var_dump($values); 

live demo입니다 (@에서 촬영 Evanrose의 comment)

+0

이 솔루션은 모든 중첩 수준에 대해 유연합니다. – EaBangalore

+0

@Ebangalore 예,이 솔루션은 중첩 수준에 따라 유연합니다. –

+0

좋은 해결책을 가져 주셔서 고마워요 – EaBangalore