如何在PHP中将数组嵌套成一个多维数组

7

假设我们有一个数组:array(1,2,3,4,...) 现在我想将其转换为:

array(
    1=>array(
        2=>array(
            3=>array(
                4=>array()
            )
        )
    )
)

有人能帮忙吗?
谢谢

编辑 最好能提供迭代解决方案。


2
听起来有点不合逻辑。你需要它做什么? - Bogdan Burym
2
Q:如何从数组中获取数据?A:使用循环。 - Your Common Sense
愿意和我们分享为什么你想这样做吗?很难想象有任何情况需要这样做。 - George
我正在学习 PHP 并想练习数组。 - MrFix
1
有时候,@YourCommonSense 甚至不能胜任,需要使用递归函数。 - Matsemann
5个回答

12
$x = count($array) - 1;
$temp = array();
for($i = $x; $i >= 0; $i--)
{
    $temp = array($array[$i] => $temp);
}

9
您可以简单地编写一个递归函数:

您可以通过编写一个递归函数来解决该问题:

<?php
function nestArray($myArray)
{
    if (empty($myArray))
    {
        return array();
    }

    $firstValue = array_shift($myArray);
    return array($firstValue => nestArray($myArray));
}
?>

我认为这是最清晰的解决方案,只需一眼就能知道它的作用。在基本情况下,你应该返回一个空数组。 - Matsemann
是的,这可能是一个优雅的解决方案,但我需要迭代的解决方案。感谢您的帮助 :)。有很多完成相同任务的方法。 - MrFix
3
@MrFix: 构建数组的思维过程显然是递归的(通常涉及嵌套任务),这种解决方案具有清晰简洁的优势。如果您的目标是练习,最好现在就养成良好的习惯 :-)。 - Blackhole
@Blackhole,我正在逐步学习,我认为学习其他可能的解决方案对我也会有好处。谢谢你的建议 :) - MrFix

8

好的,试试这样:

$in  = array(1,2,3,4); // Array with incoming params
$res = array();        // Array where we will write result
$t   = &$res;          // Link to first level
foreach ($in as $k) {  // Walk through source array
  if (empty($t[$k])) { // Check if current level has required key
    $t[$k] = array();  // If does not, create empty array there
    $t = &$t[$k];      // And link to it now. So each time it is link to deepest level.
  }
}
unset($t); // Drop link to last (most deep) level
var_dump($res);
die();

输出:

array(1) {
  [1]=> array(1) {
    [2]=> array(1) {
      [3]=> array(1) {
        [4]=> array(0) {
        }
      }
    } 
  }
} 

3
我认为你想创建的多维数组的语法应该如下所示。
$array = array(

   'array1' => array('value' => 'another_value'), 
   'array2' => array('something', 'something else'),
   'array3' => array('value', 'value')
);

这是您在寻找的内容吗?


这个回答为什么会被点赞?!?它根本没有提供任何转换代码。 - mickmackusa

1
你可以使用这个数组库,只需一行代码即可实现:
$array = Arr::setNestedElement([], '1.2.3.4', 'value');

显然这不是示例输入(并不难将其转换为OP的数据类型) - mickmackusa

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