将其重写为更具体。
我有一个csv文件。每一行都有一个爆炸成一个表示类别树的数组的字段。因此,前三行可能会成为数组:
array('food', 'fruit', 'red', 'apple')
array('food', 'fruit', 'green', 'kiwi')
array('beauty', 'makeup', 'lipstick')
但它应该是一棵树。我最终需要:
food
fruit
red
apple
green
kiwi
beauty
makeup
lipstick
与此相关的主要区别以及我见过的几十个类似问题的问题和答案是,每个记录读取中没有保证的级别数,以及一条记录可能没有共同密钥的可能性很大和另外一个。所以array_merge似乎失败了,就像使用+
一样唯一的保证是,对于任何记录,假定键列表从数组的顶层开始,如果有
rec1 = animal, fish, shark
rec2 = fish, shark, hammerhead
预期结果是
animal
fish
shark
fish
shark
hammerhead
答案 0 :(得分:2)
$i = count($array) - 1;
$new_array = $array[ $i ];
while ( $i-- ) {
$new_array = array( $array[ $i ] => $new_array );
}
在此处查看:[{3}}
答案 1 :(得分:0)
这是一个可能的解决方案,使用递归。
<?php
$foo = array('food', 'fruit', 'red', 'apple');
function categorize($arr) {
if (count($arr) > 2) {
$temp[$arr[0]] = categorize(array_slice($arr, 1));
} else {
$temp[$arr[0]] = array($arr[1]);
}
return $temp;
}
print_r(categorize($foo));
输出:
Array
(
[food] => Array
(
[fruit] => Array
(
[red] => Array
(
[0] => apple
)
)
)
)
与其他示例联系: http://codepad.org/xmK1oYy1