2016-07-25 7 views
0
{ 
    "books": [ 
    { 
     "id": 2331, 
     "image": "http://lol.org/flower.png", 
     "images": [ 
       { 
        "256x144": "http://lol.org/bee.png", 
        "650x320": "http://lol.org/fly.png" 
        } 
       ], 

.... 

私は上記のようなjsonデータを持っていますが、私の問題は650x320データを取得する方法です。以下PHPで複数レベルのjsonデータを解析する

$data = json_decode($jsondata,true); 
$gg = sizeof($data['books']); 
for($x=0;$x<$gg;$x++){ 

コードが

$image = $data['books'][$x]['image']; 

正常に動作しますが、どのように第二のJSONレベルに画像を取得するには?私は運がない下のコードを試してみました。

$image = ($data->{'books'}->{'images'}->{'320x180'}); 

    $image = $data['books']['images'][$x]['320x180']; 
+0

それはJSONの外に出たPHPのデータ構造を確認するために、 '$のdata'の' print_r'を行います。 – ceejayoz

+1

$ data ['books'] [0] ['images'] [0] ["320x180"]; – Vanojx1

+0

$ image ['books'] [$ x] ['images'] [0] ["320x180"]; ええ、これは私の問題を解決しました。 – sukkis

答えて

1

'books'はオブジェクトの配列です。数値インデックスを使用してオブジェクトを選択する必要があります。

$image = $data['books'][$insertIndexHere]['images'][$insertIndexHere]['320x180']; 

基本的に、あなたは働くあなたの最初のコードから'books''images'[$x]を逃しました。

おそらく、各本を繰り返すループと、次に各ブックのイメージを繰り返し処理する2番目のネストループが必要です。例えば

$gg = sizeof($data['books']); 
for($x=0;$x<$gg;$x++) { 
    $images = data['books'][$x]['images']; 
    $sizeOfImages = sizeof($images); 
    for($j = 0; $j < $sizeOfImages; $j++) { 
     // access $images[$j]['320x180'] 
    } 
} 
2
function getImageLinksFor($json, $dimension='650x320') { 
    $links  = array(); 
    $objJson = json_decode($json); 

    // GET THE MAIN BOOKS OBJECT... 
    $books = $objJson->books; 

    // LOOP THROUGH THE $books OBJECT AND PERFORM YOUR SEARCH FOR IMAGES 
    foreach ($books as $obj) { 
     // SINGLE OUT THE IMAGES OBJECT 
     $images = $obj->images; 
     // SINCE IT IS ALSO AN ARRAY, SIMPLY LOOP THROUGH IT AND FETCH THE DESIRED DIMENSION. 
     foreach ($images as $key => $objImgData) { 
      if(property_exists($objImgData, $dimension)){ 
       $links[] = $objImgData->$dimension; 
      } 
     } 
    } 
    if(count($links) == 1){ 
     return implode("", $links); 
    } 
    return $links; 
} 

var_dump(getImageLinksFor($json, '650x320')); 
関連する問題