2017-05-11 2 views
1

PHP와 MySQL을 사용하여 $response이라는 배열을 생성했습니다.PHP 다차원 배열 foreach

here으로 볼 수있다. (주석의 요청에 따라) 어레이의 json_encode

array(2) { 
    ["OperationRequest"]=> 
    array(4) { 
    ["HTTPHeaders"]=> 
    array(1) { 
     [0]=> 
     array(1) { 
     ["@attributes"]=> 
     array(2) { 
      ["Name"]=> 
      string(9) "UserAgent" 
      ["Value"]=> 
      string(14) "ApaiIO [2.1.0]" 
     } 
     } 
    } 
    ["RequestId"]=> 
    string(36) "f53f381e-efb3-4fef-8e39-4f732b4b463e" 
    ["Arguments"]=> 
    array(1) { 
     ["Argument"]=> 
     array(11) { 
     [0]=> 
     array(1) { 
      ["@attributes"]=> 
      array(2) { 
      ["Name"]=> 
      string(14) "AWSAccessKeyId" 
      ["Value"]=> 
      string(20) "KEY" 
      } 
     } 
     [1]=> 
     array(1) { 
      ["@attributes"]=> 
      array(2) { 
      ["Name"]=> 
      string(12) "AssociateTag" 
      ["Value"]=> 
      string(11) "TAG" 
      } 
     } 
     [2]=> 
     array(1) { 
      ["@attributes"]=> 
      array(2) { 
      ["Name"]=> 
      string(6) "IdType" 
      ["Value"]=> 
      string(4) "ISBN" 
      } 
     } 
     [3]=> 
     array(1) { 
      ["@attributes"]=> 
      array(2) { 
      ["Name"]=> 
      string(6) "ItemId" 
      ["Value"]=> 
      string(38) "0751538310,9780141382067,9781305341141" 
      } 
     } 
     [4]=> 
     array(1) { 
      ["@attributes"]=> 
      array(2) { 
      ["Name"]=> 
      string(9) "Operation" 
      ["Value"]=> 
      string(10) "ItemLookup" 
      } 
     }.......so on 

here는 알 수있다.

나는이 두 항목에서 Title을 선택하고 싶습니다. 내가 볼 수있는 것에서 이것은 이것이 위치해 있습니다;

Items > Item > ItemAttributes > Author 

그래서, 나는 다음과 같은 시도 가지고 foreach 루프를 사용하여;

foreach ($response as $item) { 
    echo $item['Items']['Item']['ItemAttributes']['Title']; // line 2 
} 

그러나이 오류는 다음과 같은 오류를 반환합니다.

메시지 : 정의되지 않은 색인 : 항목. 줄 번호 : 2

내가 잘못 가고 있으며 원하는 결과를 얻으려면 코드에서 어떤 부분을 변경해야합니까?

또한 다차원 배열을 '읽는'방법에 대한 조언은 크게 감사하겠습니다.

감사

+0

이렇게하면됩니다 : -'echo $ item [ 'OperationRequest'] [ 'Items'] [ 'Item'] [ 'ItemAttributes'] [ 'Title']; ' –

+1

@johnny_s 위의 배열의'json'을 공유 할 수 있습니까? –

+0

@johnny_s'echo json_encode ($ response); ' –

답변

2

이 항목을 선택하면 도움이됩니다. 잘못된 키를 반복하여 원하는 결과를 얻지 못하는 이유입니다.

Try this code snippet herefrom json provide by OP in question

foreach($array["Items"]["Item"] as $key => $value) 
{ 
    print_r($value["ItemAttributes"]["Title"]); 
    echo PHP_EOL; 
} 

출력 : 점점 독특한 타이틀

Panic Panic Captain Flinn and the Pirate Dinosaurs: Missing Treasure! (Captain Flinn)

:

foreach(json_decode($json,true)["Items"]["Item"] as $key => $value) 
{ 
    $result[]=$value["ItemAttributes"]["Title"]; 
    echo PHP_EOL; 
} 
print_r(array_unique($result)); 
0

과 같이 디버깅해야합니다

foreach ($response as $key => $item) { 
    if(isset($item['Items'])){ //Check Items index defined 
     echo $item['Items']['Item']['ItemAttributes']['Title']; 
    }else{ 
     var_dump($key); 
    } 
} 
+0

정확히 그 목적은 무엇입니까? 그러면'string (16) "OperationRequest"string (5) "Items"항목이 생성됩니다. 감사합니다 –

+0

귀하의 배열 키에 의해 정의 된 때문에, 액세스 하위 배열에 대한 경로로 정확하게 키를 입력해야합니다. 키가없는 배열이 존재하지 않으면 php는 경고합니다 : "정의되지 않은 인덱스" "OperationRequest"및 "Items"키를 사용하면 하위 배열 $ item [ 'Items'] => 오류 이 스크립트를 추가 할 수 있습니다 각 키를 디버그하려면 var_dump ($ key); 다이; – allready4v

1

이 @Also, '읽기'하는 방법에 대한 조언 다차원 배열이 크게 감상 할 수있다.

http://json.parser.online.fr

후 인코딩 된 JSON 문자열은 "+"와 "-"오른쪽 창에서 버튼을 쉽게 읽을 수 있도록해야한다.

//Check Items is not empty 
if(!isset($response["Items"]["Item"]) || empty($response["Items"]["Item"])) 
    throw New Exception("Empty Item"); 

foreach($response["Items"]["Item"] as $item){ 
    $title = $item['ItemAttributes']['Title'] 
} 
+0

http://json.parser.online.fr @ Parfait에 대한 설명과 링크를 제공해 주셔서 감사합니다. –