0

これをより具体的に書き直します。

私はcsvファイルを持っています。すべての行には、カテゴリ ツリーを表す配列に分解されるフィールドがあります。したがって、最初の 3 行は次のように配列になる可能性があります。

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
4

2 に答える 2

2
$i = count($array) - 1;
$new_array = $array[ $i ];

while ( $i-- ) {
    $new_array = array( $array[ $i ] => $new_array );
}

ここで実際に見てください:http://codepad.viper-7.com/bVWYrN

于 2013-08-25T04:00:51.703 に答える
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

于 2013-08-25T06:08:09.637 に答える