如何从键数组创建PHP关联数组?

时间:2013-08-25 03:55:34

标签: php arrays

将其重写为更具体。

我有一个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

2 个答案:

答案 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