2012-06-18 4 views
0

를 사용하여 JSON 파일에서 정확한 값을 얻을 :다단계 배열 내가 htis JSON 파일이 PHP

$string = file_get_contents("cennik-en.json"); 
$cennik_a=json_decode($string,true); 

그리고 난으로 접근하고 싶습니다 :

{ 
    "waluta": "EUR", 
    "vat": 1, 
    "01_00101": { 
     "cena": 130.8, 
     "kod": "00101", 
     "nazwa": "Span TRICK 1200/1982-ABS", 
     "powiazanyZ": "00139" 
    }, 
    "01_00102": { 
     "cena": 125.86, 
     "kod": "00102", 
     "nazwa": "Span TRICK 1200/1864-ABS", 
     "powiazanyZ": "00140" 
    }, 
    "02_00122": { 
     "cena": 0, 
     "kod": "00122", 
     "nazwa": "SET to Wicket TRICK 1200 elektrolock RIGHT", 
     "powiazanyZ": "00000" 
    }, 
    "02_00123": { 
     "cena": 0, 
     "kod": "00123", 
     "nazwa": "SET to Wicket TRICK 1200 elektrolock LEFT", 
     "powiazanyZ": "00000" 
    }, 
    "02_00152": { 
     "cena": 0, 
     "kod": "00115", 
     "nazwa": "Gate ABS 1200/3070 prepared to servomotor ARM 400", 
     "powiazanyZ": "00138" 
    }, 
    "02_00138": { 
     "cena": 0, 
     "kod": "00115", 
     "nazwa": "Gate ABS 1200/3070 handle, bolt", 
     "powiazanyZ": "00152" 
    } 
} 

내 PHP 코드에서

는이 같은이 읽기 값을 "kod"값으로 나타냅니다. 이것이 가능한가? 때문에 키 값에 의해 나는 그렇게 할 수 있다고 생각 :

$json_a['01_00101'][nazwa]; 
+1

'var_dump ($ cennik_a); '를 보면 json_decode()가 어떻게 처리하는지 볼 수 있습니다. 배열 키보다 가능성이 높습니다.'$ cennik_a [ '02_00138'] -> cena' –

+1

과 같은 배열의 stdClass 객체를 얻고 있습니다. json_decode()를 두 번째 param이 true로 전달하면 배열로 디코드됩니다. stdClass – peacemaker

+0

예,하지만 오류 및/또는 상수 문제를 피하기 위해 문자열을 인용하십시오 :'$ json_a [ '01_00101'] [ 'nazwa'];'&'$ json_a [ '01_00101'] [ 'kod']; ' – Wrikken

답변

2
function returnMainKey($json, $kod) { 
    foreach($json as $key => $value) 
     if(is_array($value)) 
      if(isset($value["kod"]) && $value["kod"] == $kod) 
       return $key; 
    return null; 
} 

$string = file_get_contents("cennik-en.json"); 
$cennik_a=json_decode($string,true); 
$key = returnMainKey($cennik_a, "00101"); 
echo $cennik_a[$key]["nazwa"]; 
1
당신은 너무 좋아 "KOD"값을 얻을 수 있어야합니다

을 : 위의 예에서

$kod = $json_a['01_00101']["kod"]; 

을, 당신이 시도하고 키가 문자열이기 때문에 ["nazwa"] 일 때 [nazwa]으로 액세스하십시오.

+0

나는 분명치 않다. 'kaz'값을 키로 사용하여 'nazwa', 'cena'값에 액세스해야합니다. – gerpaick

+1

이 경우에는 검색중인 값과 비교하여 [ 'kod'] 배열을 검사합니다. , 그 배열 인덱스에 대한 [ 'nazwa']를 반환합니다. – peacemaker

+0

나는 다음을 사용하려고합니다 : function getMainKey ($ kod) { foreach ($ key => $ value) { \t \t if ($ key! = "waluta"&& $ 키 = "VAT") { \t \t \t ($ 값 [ "KOD"] == $의 KOD) { \t \t \t \t 리턴 키 경우 $! \t \t \t \t \t }}} \t }'와 사용 예에 ​​대한 결과를 얻는'에코 getMainKey ("00115"); '하지만 성공하지. 뭐가 잘못 되었 니? 그것은 나에게 오류를 준다 ** b> 경고 : foreach()에 대한 잘못된 인수가 /home/public_html/test/print.php** – gerpaick