php从平面创建多维数组

时间:2013-08-07 16:11:49

标签: php multidimensional-array

我有一个这样的数组:

<?php
     $array = array( 0 => 'foo', 1 => 'bar', ..., x => 'foobar' );
?>

创建多维数组的最快方法是什么,其中每个值都是另一个级别? 所以我得到了:

array (size=1)
 'foo' => 
   array (size=1)
    'bar' => 
      ...
      array (size=1)
        'x' => 
          array (size=1)
            0 => string 'foobar' (length=6)

5 个答案:

答案 0 :(得分:1)

试试这个:

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

print_r($out);

从另一篇文章中抓取它。

答案 1 :(得分:1)

<?php
$i = count($array)-1;
$lasta = array($array[$i]);
$i--;    
while ($i>=0)
{
    $a = array();
    $a[$array[$i]] = $lasta;
    $lasta = $a;
    $i--;
}
?>

$a是输出。

答案 2 :(得分:0)

你到底想要做什么?如此多的1号数组看起来有点傻。

您可能希望使用带有键=&gt;值对的foreach循环

foreach ($array as $k=>$v) {
  print "key: $k  value: $v";
}

你可以做这样的事情来实现你要求的阵列:

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

答案 3 :(得分:0)

我对你想用非数字键做什么感到困惑(例如你的例子中的x)。但无论如何使用数组引用都会有帮助

$array = array( 0 => 'foo', 1 => 'bar',  x => 'foobar' );


$out = array();
$curr = &$out;

foreach ($array as $key => $value) {
    $curr[$value] = array(); 
    $curr = &$curr[$value];
}

print( "In: \n" );
print_r($array);
print( "Out : \n" );
print_r($out);

打印

In:
Array
(
    [0] => foo
    [1] => bar
    [x] => foobar
)
Out :
Array
(
    [foo] => Array
        (
            [bar] => Array
                (
                    [foobar] => Array
                        (
                        )

                )

        )

)

答案 4 :(得分:0)

您可以使用递归函数,这样您就不会在每一步迭代数组。这是我写的这样一个函数。

function expand_arr($arr)
{
    if (empty($arr))
        return array();

    return array(
        array_shift($arr) => expand_arr($arr)
    );
}

你的问题有点不清楚,因为在你的初始陈述中你使用数组中的下一个值作为下一步的键,然后在你的例子结尾处你使用原始键作为唯一的键。下一步的关键。