2014-03-26 48 views
0

我继承了从哪里获得通过,看起来像这样的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); 

我肯定有一个简单的和更好的方式来退出这个功能,但我太傻,看看它:/ 任何暗示将不胜感激:)

回答

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