2013-03-25 10 views
13

Il mio codice PHP:Come scorrere matrice JSON con PHP

$obj = json_decode($data); 
print $obj->{'name'}; 

Mentre lavora per i non-array, non posso per la vita di me a capire come stampare tutti i valori all'interno del " Recensioni "Array.

Quello che mi piacerebbe fare è passare attraverso questa risposta, probabilmente con forreach(), risultando in una lista contenente la valutazione e l'estratto per ogni recensione nella risposta.

Qualsiasi orientamento/direzione è molto apprezzato ..

riportano di seguito le JSON con cui sto lavorando. (è la risposta dell'API di Yelp).

{ 
    "is_claimed": true, 
    "rating": 4.5, 
    "mobile_url": "http://m.yelp.com/biz/economy-paint-and-collision-riverside", 
    "rating_img_url": "http://s3-media2.ak.yelpcdn.com/assets/2/www/img/99493c12711e/ico/stars/v1/stars_4_half.png", 
    "review_count": 19, 
    "name": "Economy Paint & Collision", 
    "snippet_image_url": "http://s3-media3.ak.yelpcdn.com/photo/ZOzoahw0Go_DEPLvxCaP_Q/ms.jpg", 
    "rating_img_url_small": "http://s3-media2.ak.yelpcdn.com/assets/2/www/img/a5221e66bc70/ico/stars/v1/stars_small_4_half.png", 
    "url": "http://www.yelp.com/biz/economy-paint-and-collision-riverside", 
    "reviews": [ 
     { 
      "rating": 3, 
      "excerpt": "The Good:\nDennis quoted me a price over the phone about 1 month before I took my wifes 2010 Escalade in for repairs and when I took it in he gave me the...", 
      "time_created": 1357010247, 
      "rating_image_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/34bc8086841c/ico/stars/v1/stars_3.png", 
      "rating_image_small_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/902abeed0983/ico/stars/v1/stars_small_3.png", 
      "user": { 
       "image_url": "http://s3-media3.ak.yelpcdn.com/photo/mIsU7ugYd88lLA-XL2q1Cg/ms.jpg", 
       "id": "V9MDZvEBv-tBTF4YIoc7mg", 
       "name": "Sydney H." 
      }, 
      "rating_image_large_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/e8b5b79d37ed/ico/stars/v1/stars_large_3.png", 
      "id": "HfOhzLIlJoUKSKU8euclqA" 
     }, 
     { 
      "rating": 5, 
      "excerpt": "Dennis and his team did an amazing job on the roof of my fiancee's 2002 Acura RSX after years of living by the beach in San Francisco had mostly rusted...", 
      "time_created": 1354741952, 
      "rating_image_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png", 
      "rating_image_small_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png", 
      "user": { 
       "image_url": "http://s3-media3.ak.yelpcdn.com/photo/ZOzoahw0Go_DEPLvxCaP_Q/ms.jpg", 
       "id": "kOqCnCjYn0EbAhtH1tfjcw", 
       "name": "Jason H." 
      }, 
      "rating_image_large_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png", 
      "id": "YzZg1LX6zeRaurq9tYUcMw" 
     }, 
     { 
      "rating": 5, 
      "excerpt": "It's been a year since I had my car painted here, and I gotta say: It still looks just as good as it did when I first picked it up. You would never know...", 
      "time_created": 1361043626, 
      "rating_image_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png", 
      "rating_image_small_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png", 
      "user": { 
       "image_url": "http://s3-media1.ak.yelpcdn.com/photo/58coTtu1x5riHSgFEAQsfw/ms.jpg", 
       "id": "kVrW3138d5VL-AZ97wFF4A", 
       "name": "Jeanne M." 
      }, 
      "rating_image_large_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png", 
      "id": "r5WtlQVMXiIMBR6S3N7RZw" 
     } 
    ], 
    "phone": "9517870227", 
    "snippet_text": "Dennis and his team did an amazing job on the roof of my fiancee's 2002 Acura RSX after years of living by the beach in San Francisco had mostly rusted...", 
    "image_url": "http://s3-media3.ak.yelpcdn.com/bphoto/kodoEcmgHRG61pPaWRndbw/ms.jpg", 
    "categories": [ 
     [ 
      "Body Shops", 
      "bodyshops" 
     ], 
     [ 
      "Auto Repair", 
      "autorepair" 
     ] 
    ], 
    "display_phone": "+1-951-787-0227", 
    "rating_img_url_large": "http://s3-media4.ak.yelpcdn.com/assets/2/www/img/9f83790ff7f6/ico/stars/v1/stars_large_4_half.png", 
    "id": "economy-paint-and-collision-riverside", 
    "is_closed": false, 
    "location": { 
     "city": "Riverside", 
     "display_address": [ 
      "2548 Rubidoux Blvd", 
      "Riverside, CA 92509" 
     ], 
     "geo_accuracy": 8, 
     "postal_code": "92509", 
     "country_code": "US", 
     "address": [ 
      "2548 Rubidoux Blvd" 
     ], 
     "coordinate": { 
      "latitude": 34.0132437, 
      "longitude": -117.3923804 
     }, 
     "state_code": "CA" 
    } 
} 

risposta

17

Probabilmente si verificano problemi perché le recensioni sono un array e si sta tentando di accedervi come oggetto JSON.

$obj = json_decode($data, TRUE); 
for($i=0; $i<count($obj['reviews']); $i++) { 
    echo "Rating is " . $obj['reviews'][$i]["rating"] . " and the excerpt is " . $obj['reviews'][$i]["excerpt"] . "<BR>"; 
} 
+0

tu bellissimo, bellissimo uomo GRAZIE !!! Stavo andando veloce da nessuna parte fino a questa risposta – user2170611

+0

come otterresti cose più basse nei dati, come l'utente "image_url"? – internetgho5t

1

Non sono sicuro di cosa si desidera esattamente ma credo che si desideri stamparlo solo per eseguire il debug in questo momento. Puoi provare con print_r($obj); e var_dump($obj); - devono stampare qualcosa, in particolare var_dump(). Quando visualizzi i dati, puoi facilmente modificare la funzione un po ', così puoi fare ad esempio print_r($obj->reviews) o print_r($obj['reviews']), a seconda se $obj è oggetto o array.

+0

Grazie per la risposta, quello che sto cercando di fare è semplicemente stampare/echo la valutazione e l'estratto per tutte le entità all'interno dell'array di recensioni. Sono perso su come stampare/echo questi dati da solo, senza tutto il resto – user2170611

0

È possibile utilizzare var_dump o print_r.

<?php 
$decodedJSON = json_decode($jsonData); 

// Put everyting to the screen with var_dump; 
var_dump($decodedJSON); 

// With print_r (useful for arrays); 
print_r($decodedJSON); 

// List just review ratings with foreach; 
foreach($decodedJSON['reviews'] as $review){ 
    echo $review['rating']; 
} 
?>