6

说,我们有一个数组:array(1,2,3,4,...) 我想将它转换为:

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

有人可以帮忙吗?
谢谢

编辑最好有迭代的解决方案。

4

5 回答 5

12
$x = count($array) - 1;
$temp = array();
for($i = $x; $i >= 0; $i--)
{
    $temp = array($array[$i] => $temp);
}
于 2013-06-19T10:46:57.867 回答
9

您可以简单地创建一个递归函数:

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

    $firstValue = array_shift($myArray);
    return array($firstValue => nestArray($myArray));
}
?>
于 2013-06-19T10:46:16.693 回答
7

好吧,尝试这样的事情:

$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) {
        }
      }
    } 
  }
} 
于 2013-06-19T10:45:13.173 回答
3

我认为您要创建的多维数组的语法如下所示。

$array = array(

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

这是你要找的吗?

于 2013-06-19T10:46:10.033 回答
1

你也可以使用这个数组库在一行中做到这一点:

$array = Arr::setNestedElement([], '1.2.3.4', 'value');
于 2019-02-26T19:18:44.647 回答