Jesse Luke Orange
Jesse Luke Orange

Reputation: 1999

Turning a string into an associative array in PHP

I am using PHP with cURL to make requests to an API.

The API responds with an encrypted string which I then have to use json_decode on and run it through a pre-defined decrypt method that returns a string.

So I have something like this:

echo $response; 
$decodedResponse = json_decode($response, true);

// New instance of Decrypt
$decrypt =  new Decrypt();
$decryptedResponse = $decrypt->decrypt($decodedResponse);
echo $decryptedResponse;

Using var_dump($decryptedResponse) yields string(960) but the string looks like a JSON array.

{"Title":"Mr","Forenames":"Steve"}

So what is the best way to rip apart this string so that I can use the variables through an associative array?

I had already tried:

foreach(decryptedResponse as $data)
{
    echo $data['Title'];
}

But this outputted nothing on the screen.

Am I misinterpreting the use of json_decode?

As many have stated it seems you have to decode twice, I'll look into this and share my findings.

Upvotes: 0

Views: 59

Answers (3)

Sourabh
Sourabh

Reputation: 500

As you told Using `var_dump($decryptedResponse)` yields string(960) but the string looks like a JSON   means your decrypt duration convert it again json. You can try bellow code it may resolve your issue
    $decodedResponse = json_decode($response, true);
    // New instance of Decrypt
    $decrypt =  new Decrypt();
    $decryptedResponse = $decrypt->decrypt($decodedResponse);
    $decryptedResponse = json_decode($response, true);
    foreach(decryptedResponse as $data)
    {
        echo $data['Title'];
    }

Upvotes: 0

shushu304
shushu304

Reputation: 1498

You need to json_decode again on the decrypt result

$decodedResponse = json_decode($response, true);

// New instance of Decrypt
$decrypt =  new Decrypt();
$decryptedResponse = $decrypt->decrypt($decodedResponse);

$decryptedArry = json_decode($decryptedResponse, true);
var_dump($decryptedArry);
echo $decryptedArry['Title'];

Upvotes: 1

Jonathan
Jonathan

Reputation: 177

The code below shows that the json_decode works like you want it to but it seems like your Decryption class does something weird.

$response = '{"Title":"Mr","Forenames":"Steve"}';
$decodedResponse = json_decode($response, true);

var_dump($decodedResponse);
echo $decodedResponse["Title"];

Upvotes: 0

Related Questions