PHP将数据存储到多维数组中

PHP将数据存储到多维数组中,php,arrays,for-loop,multidimensional-array,Php,Arrays,For Loop,Multidimensional Array,我有一个数组,其中第一项是一个类别的键,第二项是该类别的名称,第三项是一个子类别的键,第四项是它的名称,第五项是一个子类别的键。。。我想将数据存储到一个新的数组中,其中键将承载层次结构。因此,它看起来是这样的: $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.

我有一个数组,其中第一项是一个类别的键,第二项是该类别的名称,第三项是一个子类别的键,第四项是它的名称,第五项是一个子类别的键。。。我想将数据存储到一个新的数组中,其中键将承载层次结构。因此,它看起来是这样的:

$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.
$dat[$ar[1]] = $ar[2];
$dat[$ar[1]] = array($ar[3] => $ar[4]);

$ar的项目数量和$dat的深度是固定的。如何编写for循环以实现上述行为?

我认为不可能实现确切的请求。考虑<代码> $dAT[$AR(1)] [$AR(3)]=$ AR(4)< /代码>与<代码> $dAT[$AR[1 ] ] =数组($AR(3)=$AR(4))< /代码>。这意味着您正试图分配两次
$dat[$ar[1]]
,如下所示:

$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.
$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>';

我认为不可能提出确切的要求。考虑<代码> $dAT[$AR(1)] [$AR(3)]=$ AR(4)< /代码>与<代码> $dAT[$AR[1 ] ] =数组($AR(3)=$AR(4))< /代码>。这意味着您正试图分配两次
$dat[$ar[1]]
,如下所示:

$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.
$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>';

您能否提供一些示例输入数据和一些预期的输出数据?您的
$ar
是否是一个基于0的标量数组,而不是从1开始?还是实际的关联数组?它是像
$ar=array('color','blue','type','plant','flower','tulip')还是更像
$ar=array('1'=>'color','2'=>'blue','3'=>'blue','4'=>'plant','5'=>'plant','6'=>'flower','7'=>'flower','8'=>tulip')
该数组是从索引1开始的标量数组。您可以提供一些示例输入数据和一些预期输出数据吗?您的
$ar
是基于0的标量数组,而不是从1开始的标量数组吗?还是实际的关联数组?它是否像
$ar=array('color','blue','type','plant','flower','tulip')
或者更像
$ar=array('1'=>'color','2'=>'blue','3'=>'blue','4'=>'plant','5'=>'plant','6'=>'flower','7'=>'flower 8'=>tulip')
数组是从索引1开始的标量数组