创建动态多维数组。

5

我试图在解析以点分隔的字符串时创建一个数组

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

to

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

我使用了解析函数

来提取关键字。
$keys = explode(".",$string);

我该如何做到这一点?

1
总是有三个键还是任意数量的键? - Toto
它必须适用于任何数字。 - Paté
3个回答

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;

演示

你可以轻松地将这个函数传递字符串和值作为参数,并返回数组。


@dev:因为在将数组分配给变量时,它会被复制。如果您不使用引用,它将无法正常工作。 - Felix Kling

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

这与你可以在这里找到答案的问题有些关联:

PHP一层深入数组每次循环制造

你只需要稍微改变一下代码:

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

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

$c = 5;

print_r($b);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接