2010-11-14 8 views
1

Je travaille avec des données JSON pour la première fois et j'ai quelques PHP pour récupérer des données JSON comme ci-dessous (sauf il y a des centaines de measuregrps en corps). Comment utiliser foreach pour, par exemple, créer un tableau de valeurs unidimensionnel pour type = 1?Utilisation de PHP foreach pour créer un tableau de valeurs à partir des données JSON

{ 
     "status": 0, 
     "body": { 
      "updatetime": 1249409679, 
      "measuregrps": [ 
       { 
        "grpid": 2909, 
        "attrib": 0, 
        "date": 1222930968, 
        "category": 1, 
        "measures": [ 
         { 
          "value": 79300, 
          "type": 1, 
          "unit": -3 
         }, 
         { 
          "value": 652, 
          "type": 5, 
          "unit": -1 
         }, 
         { 
          "value": 178, 
          "type": 6, 
          "unit": -1 
         }, 
         { 
          "value": 14125, 
          "type": 8, 
          "unit": -3 
         } 
        ] 
       }, 
       { 
        "grpid": 2908, 
        "attrib": 0, 
        "date": 1222930968, 
        "category": 1, 
        "measures": [ 
         { 
          "value": 78010, 
          "type": 1, 
          "unit": -3 
         } 
        ] 
       }, 
       { 
        "grpid": 2907, 
        "attrib": 0, 
        "date": 1222930968, 
        "category": 1, 
        "measures": [ 
         { 
          "value": 77300, 
          "type": 1, 
          "unit": -3 
         }, 
         { 
          "value": 678, 
          "type": 5, 
          "unit": -1 
         } 

        ] 
       }, 


      ] 
     } 
    } 
+0

Parfois, son but est plus claire à la personne demandant que la lecture de personne. Quelle devrait être la sortie exactement? La notation 'array (/ * ... * /)' serait particulièrement utile. – Matchu

Répondre

0

Quelque chose comme

$values = array(); 

foreach($json_o->body->measuregrps as $group){ 
    foreach($group->measures as $measure){ 
    if($measure->type == 1){ 
     $values[] = $measure->value; 
    } 
    } 
} 

print_r($values); 

fera

2
$json_o = json_decode($json,true); 

$result = array(); 

foreach ($json_o['body']['measuregrps'] as $measuregrp) 
foreach ($measuregrp['measures'] as $measure) 
    if ($measure['type'] == 1) 
    $result []= $measure['value']; 
+1

Mais la prochaine fois s'il vous plaît essayer de trouver un code vous-même, alors nous pouvons vous aider si cela ne fonctionne pas. – AndreKR

+0

Cela ne fonctionnera pas, car 'body', etc. sont des instances de stdClass. Ils ne sont pas des tableaux, ils ne peuvent donc pas être appelés comme tableaux. – Harmen

+2

Cela fonctionne, puisque le deuxième paramètre dit que le résultat devrait utiliser des tableaux associatifs à la place des objets standards. http://php.net/manual/fr/function.json-decode.php – PatrikAkerstrand

Questions connexes