2016-06-12 11 views
1

Was ich benutze:Array verlieren Schlüssel nach der zweiten foreach-Schleife

$raw = file_get_contents('url'); 
$raw = json_decode($raw,true); 

foreach($raw['data'] as $spell){ 
    var_dump($spell); 
} 

Was erhalte ich:

array(1) { 
    ["image"]=> array(2){ 
     ["w"]=> int(48) 
     ["h"]=> int(48) 
    } 
} 

Für jetzt ist alles in Ordnung.

Aber wenn ich eine zweite Schleife (wegen der mehr als 1 Tasten & Werte) wie folgt aus:

foreach ($raw['data'] as $spell){ 
    foreach ($spell['image'] as $image) { 
     var_dump($image); 
    } 
} 

ich:

int(48) int(48) 

Nichts anderes.
ich erwartet zu bekommen:

array(2){ 
    ["w"]=> int(48) 
    ["h"]=> int(48) 
} 

Was mache ich falsch?

+2

Mit der zweiten foreach-Schleife gehen Sie durch das SubArray '$ raw [" data "] [" image "]' welches nur Integer-Werte und keine Arrays enthält, so dass diese ausgegeben werden. Ändere die zweite foreach-Schleife auf: 'foreach ($ buchstabieren ['image'] als $ key => $ image) echo" $ key => $ wert \ n ";' Dann siehst du deinen Schlüssel. Wenn Sie Ihre erwartete Ausgabe wollen, wollen Sie nur: 'var_dump ($ rohe [" data "] [" image "]);' – Rizier123

+0

Hatte deine Antwort dreimal zu lesen, aber jetzt habe ich es und es funktioniert. Vielen Dank :) – ThaFlaxx

+0

Aber wie kann ich sie durch die '['w']' und '['h']' bekommen, muss ich sie mehrmals ausdrucken. – ThaFlaxx

Antwort

0

Mit der zweiten foreach-Schleife Sie den Sub-Array durchlaufen $raw["data"]["image"], die nur ganzzahlige Werte und nicht Arrays enthalten, so dass es druckt diese. Ändern Sie die zweite foreach Schleife zu: foreach ($spell['image'] as $key => $image) echo "$key => $value \n"; Dann sehen Sie Ihren Schlüssel.

I verwendet

foreach ($raw['data'] as $spell){ 
    print $spell['image']['x']; 
} 

Dank Rizier123 für die Antwort!