Array Werte auslesen - Problem


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

loddarmattheus

Erfahrenes Mitglied
Hi Leute,
kann mir bitte jemand mal kurz einen Tipp geben?

Ich lese eine API aus mit

PHP:
$array = json_decode($CallDepth, true);

var_dump($array);

Ausgabe lautet:


Code:
array(3)
    {
    ["lastUpdateId"]=> int(1457713840)
    ["bids"]=> array(5)
        {
        [0]=> array(2)
            {
            [0]=> string(11) "50.15000000"
            [1]=> string(10) "0.00476000"
            }
        [1]=> array(2)
            {
            [0]=> string(11) "50.14000000"
            [1]=> string(11) "15.62491000"
            }
        [2]=> array(2)
            {
            [0]=> string(11) "50.13000000"
            [1]=> string(12) "111.45432000"
            }
        }
    ["asks"]=> array(5)
        {
        [0]=> array(2)
            {
            [0]=> string(11) "50.16000000"
            [1]=> string(12) "309.47692000"
            }
        [1]=> array(2)
            {
            [0]=> string(11) "50.17000000"
            [1]=> string(12) "160.17202000"
            }
        [2]=> array(2)
            {
            [0]=> string(11) "50.18000000"
            [1]=> string(12) "639.01232000"
            }
        }
    }

Frage: Wie kann ich einer foreach Schleife alle "bids" und "asks" wiedergeben? Bei foreach($array as $row) schmeisst mir PHP nur Fehler
 

Sempervivum

Erfahrenes Mitglied
Es gibt kein $row[0] da dieses als ass. Array aufgebaut ist. Versuche $row['bids'] und analog für asks. Das ist aber nur der erste Schritt, weil dein Array mehrfach verschachtelt ist.
Und poste das Array auch mal als JSON, d. h. den Text, der vor dem json_decode vom Server kommt. Zumindest ich kann das viel besser lesen und man kann damit einfach einen Testcode erstellen.
 

Sempervivum

Erfahrenes Mitglied
PS: Da habe ich mich ein wenig versehen: $array selber ist schon ein ass. Array, wenn Du darüber mit foreach iterierst, bekommst Du lastUpdateId, bids und asks. D. h. Du musst über $array[bids] und $array['asks'] iterieren.
(Wie geschrieben: Ich kann JSON besser lesen :) ).
 

m.scatello

Erfahrenes Mitglied
Vielleicht hilft diese Darstellung des Array mehr:
PHP:
<?php
$data = array( "lastUpdateId" => 1457713840,
               "bids" => array(array("50.15000000", "0.00476000"), array("50.14000000", "15.62491000"), array("50.13000000", "111.45432000")),
               "asks" => array(array("50.16000000", "309.47692000"), array("50.17000000", "160.17202000"), array("50.18000000", "639.01232000"))
              );
echo "<pre>";
var_dump($data);
echo "</pre>";
?>
 

loddarmattheus

Erfahrenes Mitglied
PHP:
foreach($array['bids'] as $row )
echo $row['0']. " ".$row['1']. "<br />";
gibt mir zwar das Richtige aus, aber es fehlen halt die ask-Daten in der gleichen Zeile:

Code:
49.98000000 77.50134000
49.97000000 23.43193000
49.96000000 136.63861000
49.95000000 46.46520000
49.94000000 45.15170000
 

Sempervivum

Erfahrenes Mitglied
Das kannst Du lösen, indem Du eine for-Schleife mit Index verwendest, dann kannst Du parallel sowohl auf bids und auf asks zugreifen. Vermutlich wird das Array ja maschinell erstellt, so dass man davon ausgehen kann, dass beide genau parallel aufgebaut sind.
 

loddarmattheus

Erfahrenes Mitglied
Wenn ich dies als Datenmaterial nehme
Code:
<?php
$data = array( 
    "lastUpdateId" => 1457713840,
    "bids" => array
        (
        array("50.15000000", "0.00476000"), 
        array("50.14000000", "15.62491000"), 
        array("50.13000000", "111.45432000")
        ),
    "asks" => array
        (
        array("50.16000000", "309.47692000"), 
        array("50.17000000", "160.17202000"), 
        array("50.18000000", "639.01232000")
        )
);
foreach ($data as list(list($b, $c))) {
    echo "B: $b; C: $c;<br>";
};
?>
und es mit list versuche, dann komme ich bereits einen Schritt weiter, aber nicht ans Ziel:

Ergebnis:
Code:
B: ; C: ;
B: 50.15000000; C: 0.00476000;
B: 50.16000000; C: 309.47692000;

Er listet mir nur den ersten Eintrag vom array bids und den ersten vom array asks wieder. Wieso nicht den Rest?
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…