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

.... 

Ich habe JSON-Daten wie oben, aber mein Problem ist, wie 650x320 Daten zu bekommen.Analysieren mehrstufige JSON-Daten mit PHP

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

Codes arbeitet unten feine

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

aber wie Bilder auf einer zweiten Ebene json holen? Ich habe den Code unten ohne Glück versucht.

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

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

Sie ein 'print_r' von' $ data' PHP-Datenstruktur zu sehen, daß es aus dem JSON bekam. – ceejayoz

+1

$ Daten ['Bücher'] [0] ['Bilder'] [0] ["320x180"]; – Vanojx1

+0

$ image = $ Daten ['Bücher'] [$ x] ['Bilder'] [0] ["320x180"]; Ja, das hat mein Problem gelöst. – sukkis

Antwort

1

'books' ein Array von Objekten ist, müssen Sie ein Objekt mit einem numerischen Index auszuwählen.

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

Im Wesentlichen haben Sie die [$x] zwischen 'books' und 'images' von Ihrem ersten Code verpasst, die funktioniert.

Wahrscheinlich wollen Sie eine Schleife, die jedes Buch durchläuft, und dann eine zweite verschachtelte Schleife, die durch die Bilder in jedem Buch iteriert.

Zum Beispiel:

$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'));