0

I have inherited a project where I get passed a string via an API request that looks like this:

$return = "state|city|street";

Now I need to convert this into an array that reads

$value = "abcd"; //gets passed by user input
$result['state']['city']['street'] = $value;

The string that gets passed can contain any number of nestings and I don't know the name of the keys upfront. Only thing that is always the same is the delimiter.

The solution implemented by my predecessor is to explode the string and build a new string, then eval() that string:

$return = explode('|',$return);
$value = "abcd"; //gets passed by user input

$arrayString = '$result';
foreach($return as $key)
{
    $arrayString .= "['".$key."']";
}

$arrayString .= '="'.$value.'";' ;
eval($arrayString);

I am sure there is an easy and better way to pull this off but I am too stupid to see it :/ Any hint would be appreciated :)

0

1 Answer 1

1

Yes, under @Jack suggest I got this working way:

$str = "state|city|street";

$result = array();

$node = &$result;

foreach(explode("|", $str) as $v)
{
    $node = &$node[$v];
}

var_dump($result);  

array (size=1)
    'state' => 
        array (size=1)
            'city' => 
                array (size=1)
                    'street' => &null
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.