3

我有一个这样的数组:

<?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)
4

5 回答 5

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

$a是输出。

于 2013-08-07T16:34:10.580 回答
1

尝试这个:

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

print_r($out);

从另一个帖子中抢到。

于 2013-08-07T16:24:54.597 回答
0

你到底想做什么?这么多大小为 1 的数组似乎有点傻。

您可能希望将 foreach 循环与 key=>value 对一起使用

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);
}
于 2013-08-07T16:17:59.437 回答
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
                        (
                        )

                )

        )

)
于 2013-08-07T16:32:30.810 回答
0

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

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

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

您的问题有点不清楚,因为在您的初始语句中,您使用数组中的下一个值作为下一步的键,然后在示例结束时,您使用原始键作为下一步中的唯一键钥匙。

于 2013-08-07T16:36:56.430 回答