2011-11-03 87 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);