我继承了一个项目,我通过API请求传递了一个字符串,如下所示:
$return = "state|city|street";
现在我需要将其转换为一个读取
的数组$value = "abcd"; //gets passed by user input
$result['state']['city']['street'] = $value;
传递的字符串可以包含任意数量的嵌套,我不会事先知道密钥的名称。唯一总是相同的是分隔符。
我的前任实现的解决方案是爆炸字符串并构建一个新字符串,然后eval()表示字符串:
$return = explode('|',$return);
$value = "abcd"; //gets passed by user input
$arrayString = '$result';
foreach($return as $key)
{
$arrayString .= "['".$key."']";
}
$arrayString .= '="'.$value.'";' ;
eval($arrayString);
我确信有一个简单而且更好的方法可以解决这个问题,但我太傻了,不能看到它:/ 任何提示将不胜感激:))
答案 0 :(得分:1)
是的,在@Jack下建议我这样做了:
$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