我有一个看起来像这个例子的扁平数组:
array (
0 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '1',
'@NAME' => '[CDATA[nomenclature exemple]]',
'@LEVEL' => '0',
),
),
1 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '3',
'@NAME' => '[CDATA[droit]]',
'@LEVEL' => '1',
),
),
2 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '13',
'@NAME' => '[CDATA[législation]]',
'@LEVEL' => '2',
),
),
3 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '14',
'@NAME' => '[CDATA[statuts]]',
'@LEVEL' => '3',
),
),
4 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '15',
'@NAME' => '[CDATA[projets de loi]]',
'@LEVEL' => '4',
),
),
5 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '16',
'@NAME' => '[CDATA[réglementations]]',
'@LEVEL' => '2',
),
),
6 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '17',
'@NAME' => '[CDATA[instruments statutaires]]',
'@LEVEL' => '3',
),
),
7 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '2',
'@NAME' => '[CDATA[économie]]',
'@LEVEL' => '1',
),
),
8 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '8',
'@NAME' => '[CDATA[analyse cout-avantage]]',
'@LEVEL' => '2',
),
),
9 =>
array (
'TreePad_Fields' =>
array (
'@ID' => '6',
'@NAME' => '[CDATA[analyse socio-économique]]',
'@LEVEL' => '2',
),
),
)
我想这样:
$data = array(
'[CDATA[nomenclature exemple]]' => array(
'[CDATA[droit]]' => array(
'[CDATA[législation]]' => array(
'[CDATA[statuts]]' => array(
'[CDATA[projets de loi]]'
),
),
'[CDATA[réglementations]]' => array(
'[CDATA[instruments statutaires]]'
),
),
'[CDATA[économie]]' => array(
'[CDATA[analyse cout-avantage]]',
'[CDATA[analyse socio-économique]]',
),
)
);
我无法弄明白该怎么做。我在这里找到了将扁平化数组转换为多维数组的其他示例,但没有找到像这样的自定义子类的地方。
答案 0 :(得分:0)
我应该说,想让数据结构中的叶子具有索引数组的值的[CDATA...]
名称有点不一致,而在树的其余部分,是键。
因此,我建议通过[CDATA...]
名称将这些叶子键入,但只使用空数组作为值。这样整个结构就是一致的。
对于该结构,您可以使用此功能:
function buildTree($data) {
foreach($data as $i => $row) {
$arr = $row['TreePad_Fields'];
$level = $arr['@LEVEL'];
$key = $arr['@NAME'];
$levels[$level][$key] = [];
$levels[$level+1] = &$levels[$level][$key];
}
return $levels[0];
}
这样称呼:
$result = buildTree($data);
对于给出的样本数据,结果如下:
array (
'[CDATA[nomenclature exemple]]' => array (
'[CDATA[droit]]' => array (
'[CDATA[législation]]' => array (
'[CDATA[statuts]]' => array (
'[CDATA[projets de loi]]' => array (),
),
),
'[CDATA[réglementations]]' => array (
'[CDATA[instruments statutaires]]' => array (),
),
),
'[CDATA[économie]]' => array (
'[CDATA[analyse cout-avantage]]' => array (),
'[CDATA[analyse socio-économique]]' => array (),
),
),
)
上查看它