2014-03-26 45 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