Ik ben bezig om via een API data uit een database te halen.
Dat doe ik via:
$response = json_decode(curl_exec($ch));

Als ik daarna de data print met:
print_r ($response);

krijg ik deze output op mijn scherm:

Array
(
    [0] => stdClass Object
        (
            [id] => 32
            [email] => [email protected]
            [AInType] => Unknown
            [BType] => Html
            [dataFields] => 
            [status] => Subscribed
        )

    [1] => stdClass Object
        (
            [id] => 33
            [email] => [email protected]
            [AInType] => Unknown
            [BType] => Html
            [dataFields] => 
            [status] => Subscribed
        )

)

Dat lijkt dus prima, precies wat ik verwacht.
Nu wil ik graag in php met die data uit dat array aan de slag dus dacht ik de array te splitsen met:
foreach ($response as $key => $value) {echo '<p>'.$key.' - '.$value.'</p>';}

maar het enige dat ik te zien krijg is een "0".

Wat doe ik fout?
Je hebt een array van arrays.

Je doorloopt alleen de hoofdarray terwijl je juist geintereseerd bent in de sub-arrays.

Je krijgt dus de 0 terug van hoofdarray item 0 en je wilt de inhoud hebben van hoofdarray item 0
Wat je ook kunt doen is json_decode() voorzien van een tweede argument met waarde true zodat de geretourneerde data wordt omgezet in associatieve arrays in plaats van een array van objecten.

$value is nog steeds een array (of een object), dus die zul je niet zomaar kunnen weergeven. Maar ik neem aan dat dit voor debug-doeleinden is.

Mogelijk is het wat makkelijker werken met dat extra tweede argument.
Beste Pipo en Thomas,

Bedankt voor jullie opmerkingen!
Inderdaad, nadat ik de optie `true´toegevoegd heb aan JSON_DECODE kan ik het array weer uitlezen zoals ik gewend was.

Bedankt voor jullie hulp!


$response = json_decode(curl_exec($ch),true);
	
foreach ($response as $key => $value)
{
	echo "</br>".$response[$counter]['id']."-".$response[$counter]['email'];
	$counter++;
}
Waarom gebruik je een foreach als je alsnog met een counter werkt?


foreach ($response as $key => $value) {
    echo '<br />'.$value['id'].'-'.$value['email'];
}


En wil je geen foutafhandeling inbouwen? Wat als curl_exec niet goed gaat, dan krijg je geen geldige JSON terug. Wat als json_decode niet goed gaat (omdat de curl_exec niet goed gaat) dan is $response geen array..

Reageren