我有一个数组,其中第一项是类别的键,第二项是该类别的名称,第三项是子类别的键,第四项是其子名称,第五项是子子类的键...我&# 39; d想将数据存储到一个新的数组中,其中键将承载层次结构。因此它看起来像这样:
$dat[$ar[1]] = $ar[2];
$dat[$ar[1]][$ar[3]] = $ar[4];
$dat[$ar[1]][$ar[3]][$ar[5]] = $ar[6];
$dat[$ar[1]][$ar[3]][$ar[5]][$ar[7]] = $ar[8];
etc.
$ ar的项目数和因此$ dat的深度是固定的。如何写一个for循环来实现上述行为?
答案 0 :(得分:0)
我认为没有确切的要求。请注意$dat[$ar[1]][$ar[3]] = $ar[4]
与$dat[$ar[1]] = array($ar[3] => $ar[4])
相同。这意味着您试图像这样两次分配$dat[$ar[1]]
:
$dat[$ar[1]] = $ar[2];
$dat[$ar[1]] = array($ar[3] => $ar[4]);
会覆盖第一个值并使其毫无意义。你真正想要的是:
$dat[$ar[0]]['value'] = $ar[1];
$dat[$ar[0]][$ar[2]]['value'] = $ar[3];
$dat[$ar[0]][$ar[2]][$ar[4]]['value'] = $ar[5];
$dat[$ar[0]][$ar[2]][$ar[4]][$ar[6]]['value'] = $ar[7];
这也希望'value'永远不会是$ar
数组中用作键的值。为简单起见,我将假设您使用的是基于0的标量数组,如$ar = array('color','blue','type','plant','flower','tulip')
然后尝试:
$dat = array();
$pnt = &$dat;
$cnt = count($ar);
for ($key=0; $key < $cnt; $key+=2) {
$value = $ar[$key];
$pnt[$value]['value'] = $ar[$key + 1]; // we assign it to the key 'value' of the current array dimension
$pnt = &$pnt[$value]; // we now point to the new array dimension
}
echo '<pre>';
print_r($dat);
echo '</pre>';
然后你的输出就像:
Array
(
[color] => Array
(
[value] => blue
[type] => Array
(
[value] => plant
[flower] => Array
(
[value] => tulip
)
)
)
)