2011-08-03 4 views
1

나는 아래와 같이 json 배열을 가지고 있습니다. 원하는 것은 배열을 통해 을 구문 분석하고 해당 값을 얻습니다. 키 .Eg SubAdministrativeAreaName. 구문 분석 할 수 있습니다. 좋아요.PHP는 키를 기반으로하는 임의의 깊이의 다차원 json 배열을 구문 분석합니다

["AddressDetails"]['Country']['AdministrativeArea'] ['SubAdministrativeArea']['SubAdministrativeAreaName'] 

그러나 어레이의 구조가 고정되지 않고, 그것에는 "SubAdmininstrativeArea"내에 포함 할 수있다 다른 키들을 포함 할 수있다.

내가 원하는 것은 어떤 깊이의 다차원 json 배열을 통해 이라는 특정 키를 검색하는 PHP 함수입니다.

도움을 주시면 감사하겠습니다.

"AddressDetails": { 
    "Accuracy": 6, 
    "Country": { 
     "AdministrativeArea": { 
      "AdministrativeAreaName": "Maharashtra", 
      "SubAdministrativeArea": { 
       "SubAdministrativeAreaName": "Parbhani", 
       "Thoroughfare": { 
        "ThoroughfareName": "SH217" 
       } 
      } 
     }, 
     "CountryName": "India", 
     "CountryNameCode": "IN" 
    } 
} 

답변

0

당신은 JSONPath (JSON에 대한 XPath를) 사용할 수

http://goessner.net/articles/JsonPath/

(와 인스턴스 표현 "$ .. SubAdministrativeAreaName"에 대한)

편집 : 헤븐 ' 그것을 테스트했는지, 그것이 얼마나 신뢰할 수 있는지 확실하지 않습니다.

$path = array('AddressDetails', 'Country', 'AdministrativeArea', 'SubAdministrativeArea', 'SubAdministrativeAreaName'); 

$node = $json_object; 

foreach($path as $path_index) { 
    if(isset($node[$path_index])) { 
     $node = $node[$path_index]; 
    } else { 
     $node = NULL; 
    } 
} 

echo($node); 
2

OK, 다른 답변을 아래에 의견을 기반으로 얘들 아, 내가 만든 것은 이런 해결책이었다.

 
I finally found a simple solution myself 

For eg) To get "ThoroughfareName" make a call 
recursive_array_search($json_array,'ThoroughfareName') ; 



     function recursive_array_search($arr,$jackpot) 
     { 
      foreach ($arr as $key => $value) 
      { 
      if(is_array($value)) 
      { 
       $val=recursive_array_search($value,$jackpot) ; 
       return $val; 
      } 
      else 
      { 
        if($key==$jackpot) 
        return $value; 
      } 
      } 
     } 


+0

"배열 구조가 고정되어 있지 않고"SubAdmininstrativeArea "가 포함될 수있는 다른 키가 포함되어있을 수 있습니다." – Ben

+0

아, 잘못 읽었습니다. 나는 더 나은 해결책으로 업데이트했다. – OverZealous

+0

$ val 대신 $ value를 반환하도록 새 함수를 업데이트하거나 항상 NULL을 반환합니다. – Nick

1

감사합니다 : 이것은 당신이 어떤 배열 트리에서 알 수없는 경로를 통과 할 수

function array_key_search_deep($needle, $haystack) { 
    $value = NULL; 
    if(isset($haystack[$needle])) { 
     $value = $haystack[$needle]; 
    } else { 
     foreach($haystack as $node) { 
      if(is_array($node)) { 
       $value = array_key_search_deep($needle, $node); 
       if(!is_null($value)) { 
        break; 
       } 
      } 
     } 
    } 
    return $val; 
} 

올드 대답

:

관련 문제