我有一个这样的数组:
<?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)
答案 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)
);
}
你的问题有点不清楚,因为在你的初始陈述中你使用数组中的下一个值作为下一步的键,然后在你的例子结尾处你使用原始键作为唯一的键。下一步的关键。