将单维数组转换为多维关联数组

4
这个问题令我困惑。我已经搜索并找到了类似的问题,但我似乎找不到任何与我的确切问题匹配的问题。
在PHP中,我有一个数组,就像这样:
<?php
   $array = array('one', 'two', 'three', 'four');
?>

我想将此转换为多维数组,如下所示:
<?php
   $new_array = array('one' => array('two' => array('three' => array('four' => NULL))));
   // or, to put another way:
   $new_array['one']['two']['three']['four'] = NULL;
?>

考虑到我不知道原始数组中有多少项,我需要一种递归创建多维关联数组的方法。

这似乎是一件容易的事情,但我似乎无法弄清楚。

2个回答

5

您可以轻松地使用引用来实现这一点:

$out = array();
$cur = &$out;
foreach ($array as $value) {
    $cur[$value] = array();
    $cur = &$cur[$value];
}
$cur = null;

输出 $out 应该是:

Array
(
    [one] => Array
        (
            [two] => Array
                (
                    [three] => Array
                        (
                            [four] => 
                        )
                )
        )
)

太好了,非常感谢。参考资料仍然是我需要完全理解的东西。 - Sam

1
function recursive_array_convert ($input, &$result = array()) {
  $thisLevel = array_shift($input);
  if (count($input)) {
    if (!isset($result[$thisLevel]) || !is_array($result[$thisLevel])) {
      $result[$thisLevel] = array();
    }
    recursive_array_convert($input, $result[$thisLevel]);
  } else {
    $result[$thisLevel] = NULL;
  }
  return $result;
}

这个函数应该给你很大的灵活性 - 你可以简单地将输入数组传递到第一个参数中并在返回值中捕获结果,或者你可以将现有变量传递到第二个参数中以便用结果填充它。这意味着你可以通过以下方式实现你想要的:

$result = recursive_array_convert(array('one', 'two', 'three', 'four'));

...或者...

recursive_array_convert(array('one', 'two', 'three', 'four'), $result);

乍一看,这个选项似乎没有什么意义,但考虑以下情况:

$result = array();
recursive_array_convert(array('one', 'two', 'three', 'four'), $result);
recursive_array_convert(array('five', 'six', 'seven', 'eight'), $result);
print_r($result);
/* Output:

  Array
  (
    [one] => Array
      (
        [two] => Array
          (
            [three] => Array
              (
                [four] => 
              )
          )
      )
    [five] => Array
      (
        [six] => Array
          (
            [seven] => Array
              (
                [eight] => 
              )
          )
      )
  )

*/

正如您所看到的,该函数可以用于在同一变量中创建任意数量的链。


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