创建动态多维数组

时间:2011-11-03 10:47:48

标签: php arrays

我正在尝试在解析用点分隔的字符串时创建一个数组

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

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

我用

解析了密钥
$keys = explode(".",$string);

我怎么能这样做?

3 个答案:

答案 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

如果是这样,你可以轻松地创建一个函数,将字符串和值作为参数传递并返回数组。

答案 1 :(得分: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)
    }
  }
}
*/

答案 2 :(得分: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);