2015-08-15 101 views
1

我有此數組:PHP轉換字符串鍵數組到多鍵部分

$array['a.b.c'] = 'x'; 
$array['a.b.d'] = 'y'; 
$array['e.f'] = 'z'; 

什麼要轉換爲數組:

$array['a']['b']['c'] = 'x'; 
$array['a']['b']['d'] = 'y'; 
$array['e']['f'] = 'z'; 

是在PHP中的任何快速的方式如何做到這一點嗎?

感謝 O.

+1

的foreach循環exlode key – 2015-08-15 08:36:31

+0

可以將其轉換爲字符串,重建並使用[parse_str](http://php.net/manual/en/function.parse-str.php):'$ arr_str =「new ['」。 implode(「'] ['」,explode(「。」,key($ arr)))。「'] =」。current($ arr); parse_str($ arr_str); print_r($ new);'看[eval.in測試](https://eval.in/417076) –

回答

2

這裏是通過陣列的每個鍵使用foreach是迭代的方式,爆炸它,並使用爆炸值作爲鍵爲新陣列:

$result = array(); 

foreach($array as $key => $value) { 
    $new_keys = explode('.',$key); 
    $last_key = array_pop($new_keys); //remove last key from $new_keys 
    $a =& $result; //make $a and $result be the same variable 

    foreach($new_keys as $new_key) { 
     if(!isset($a[$new_key])) { 
      $a[$new_key] = array(); 
     } 

     $a =& $a[$new_key]; //reset $a to $a[$new_key] 
    } 

    $a[$last_key] = $value; //put $value in the last key 
} 

print_r($result); 
+0

太好了!謝謝! – ocs