2017-11-15 11 views
0

オリジナルポスト:Objects in Arrays...アレイ - カントは、JSON文字列からデータを取得

私は提供されたデータは、唯一のラインでした。私は別の「Bestaende」と「Menge」と同じの多くの行を持っている:

[{"Ean":"","Barcode":"010241770148","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90},  
{"Ean":"","Barcode":"010241770149","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90}, 
{"Ean":"","Barcode":"010241770151","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90}, 
{"Ean":"","Barcode":"010241770152","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90}] 

foreachあなたは、私が理解して説明したが、期待通りに動作しません。

$jsonarray = json_decode($jsonfile,true); 
echo 'Array 0 Menge: '.$jsonarray['0']['Bestaende']['0']['Menge'].'<br>'; 
echo 'Array 1 Menge: '.$jsonarray['1']['Bestaende']['0']['Menge'].'<br>'; 
echo 'Array 2 Menge: '.$jsonarray['2']['Bestaende']['0']['Menge'].'<br>'; 
echo 'Array 3 Menge: '.$jsonarray['3']['Bestaende']['0']['Menge'].'<br>'; 

Array 0 Menge: 1 
Array 1 Menge: 1 
Array 2 Menge: 1 
Array 3 Menge: 1 

オーケーを出します。しかし、私がforeachにしようとすると(ベースデータのリストがあるため)、出力は1行だけになります。私は1つだけのエントリ "1"を取得します。これ以上何もない。

$x=0; 
foreach($jsonarray[$x]['Bestaende'] as $idx => $Bestaende) { 
    echo 'Print Menge: '; 
    print_r($Bestaende['Menge']); 
$x++; 
} 

私はデータを取得するために配列をループしようとします。結果は次のとおりです。

Array ([Filiale] => 1 [FilialeBez] => Laden [Menge] => 1 [Gln] => [Dispo] => 0) 
Print Menge: 1 

配列の配列に問題があります。希望するデータを取得するには、より良い方法がありますか?

またはforeachループが間違っていますか?

+0

はい、あなたのforeachのは間違っています。 – entiendoNull

答えて

0

は、項目を1つだけ含まれているだけ$jsonarray[0]['Bestaende']に対するこの

foreach($jsonarray as $k=>$alldata) 
{ 
    foreach($alldata["Bestaende"] as $idx => $Bestaende) 
    { 
     echo '<pre>'; 
     echo 'Print Menge: '.$Bestaende['Menge']; 
     echo '</pre>'; 
    } 
} 
1

あなたのループのようにそれを試してみてください。 $jsonarrayをループし、そこから深くダイブする必要があります。

foreach($jsonarray as $item) { 
    echo 'Print Menge: '; 
    print_r($item['Bestaende']['0']['Menge']); 
    // or even dive in deeper 
    foreach ($item['Bestaende'] as $bestaende) { 
     // .. $bestaende['Menge']; 
    } 
} 
0
Try this code.. 
$j = '[{"Ean":"","Barcode":"010241770148","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90},  
{"Ean":"","Barcode":"010241770149","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90}, 
{"Ean":"","Barcode":"010241770151","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90}, 
{"Ean":"","Barcode":"010241770152","Bezeichnung":"Richard 1516","Bestaende":[{"Filiale":1,"FilialeBez":"Laden","Menge":1,"Gln":null,"Dispo":0}],"Bestand":1,"Dispo":0,"Uvp":269.90,"Vk":269.90}]'; 

$a = json_decode($j,true); 

foreach($a as $key => $value){ 
    if(!empty($value['Bestaende'])){ 
     foreach($value['Bestaende'] as $k=>$v){ 
      echo 'Print Menge: '.(!empty($v['Menge']) ? $v['Menge'] : '').'</br>'; 
     } 
    } 
} 
関連する問題