Morten Twellmann
Morten Twellmann

Reputation: 135

Parse string to array like CakePHP form data

I am looking for a way to parse strings in an array to an array which has a similar pattern to how CakePHP handles POST data. Or even a function in CakePHP that would do it.

UPDATED:

Current array:

array(
    'data[callers]' => (int) 4,
    'data[status]' => 'Unknown',
    'data[country_id][107]' => (int) 1,
    'data[country_id][150]' => (int) 0
)

Desired result:

array(
    'callers' => (int) 4,
    'status' => 'Unknown',
    'country_id' => array(
        (int) 107 => (int) 1,
        (int) 150 => (int) 0
    )
)

The purpose is saving serialized form data which can later be passed to a PHP function without having to POST the data from the browser.

The data comes from a form which was serialized and saved in the database. CakePHP generates input names in the form with brackets like this: data[country_id][107] and inside the controller you can access it like this $this->request->data['country_id']['107'] But when I serialize the form with javascript and save the raw JSON string in the database I need a way to make it into an array like CakePHP does.

Upvotes: 1

Views: 1129

Answers (1)

Jason Joslin
Jason Joslin

Reputation: 1144

Firstly make sure your array is valid first like:

$data = array (
    'callers' => 4,
    'status' => 'Unknown',
    'country_id' => array(
        '107' => 0,
        '150' => 0
    )
);

JSON ENCODE

Now you can json encode it

 $json = json_encode($data);
 echo $json; // prints: {"callers":4,"status":"Unknown","country_id":{"107":0,"150":0}}

See ^ it is now a string.

http://php.net/manual/en/function.json-encode.php

JSON DECODE

Then when you need it as an array call json_decode()

json_decode($data, true);

Note the second parameter is setting return array to true else you will get an the json returned as an object.

http://php.net/manual/en/function.json-decode.php

Upvotes: 1

Related Questions