2011-11-03 114 views
5

我試圖在分析與點創建動態多維數組

$string = "foo.bar.baz"; 
$value = 5 

分隔的字符串

$arr['foo']['bar']['baz'] = 5; 

創建一個數組我分析的按鍵與

$keys = explode(".",$string); 

如何我可以這樣做嗎?

+1

總是有3個鍵或任何數字? – Toto

+0

它必須與任何編號 –

回答

2

你可以這樣做:

$keys = explode(".",$string); 
$last = array_pop($keys); 

$array = array(); 
$current = &$array; 

foreach($keys as $key) { 
    $current[$key] = array(); 
    $current = &$current[$key]; 
} 

$current[$last] = $value; 

DEMO

您可以輕鬆地做出來,如果這一個函數,將字符串值作爲參數和返回數組。

+0

好,順便說一句,爲什麼你使用的參考? – Dev

+0

是的,這對我很好!謝謝 –

+0

@dev:因爲將數組分配給變量時會複製數組。如果你不使用引用,它將不起作用。 –

2

您可以嘗試以下解決方案:

function arrayByString($path, $value) { 
    $keys = array_reverse(explode(".",$path)); 

    foreach ($keys as $key) { 
    $value = array($key => $value); 
    } 

    return $value; 
} 

$result = arrayByString("foo.bar.baz", 5); 

/* 
array(1) { 
    ["foo"]=> 
    array(1) { 
    ["bar"]=> 
    array(1) { 
     ["baz"]=> 
     int(5) 
    } 
    } 
} 
*/ 
+0

有趣的方法+1 –

0

這是主題相關的問題,你可以找到答案,在這裏:

PHP One level deeper in array each loop made

你只需要更改代碼一點點:

$a = explode('.', "foo.bar.baz"); 
$b = array(); 
$c =& $b; 

foreach ($a as $k) { 
    $c[$k] = array(); 
    $c  =& $c[$k]; 
} 

$c = 5; 

print_r($b);