2

次のような文字列があります。

a,,b,c,,d,,,e,f,g,,e,,,,

次のような配列を取得したいと思います。

Array
(
    [a] => Array
        (
        )

    [b] => Array
        (
            [c] => Array
                (
                )

            [d] => Array
                (
                )

        )

    [e] => Array
        (
            [f] => Array
                (
                    [g] => Array
                        (
                        )

                    [e] => Array
                        (
                        )

                )

        )

)

ロジックは次のとおりです。アイテムの後、最初のコンマでアイテムが開き、2 番目のコンマでアイテムが閉じられます。2 つのコンマの間のすべてがその子です。

私はこの機能を作りました:

function source() {
    global $get;
    $items = array();
    $item = true;
    while ($item) {
        $pieces = explode(',', $get, 2);
        if (!empty($pieces[1])) $get = $pieces[1];
        $item = $pieces[0];
        if ($item) $items[$item] = source();
    }
    return $items;
}
$get = 'a,,b,c,,d,,,e,f,g,,e,,,,';
print_r (source());

文字列がアイテムとコンマで終わるか、コンマなしで終わると無限ループになるなど、まだいくつかの問題があります。関数を呼び出す前に十分なコンマがあるかどうかを確認して追加できることはわかっていますが、自分の関数が好きではありません。私は誰かがこれについて私より優れていることを知っています。だから私は尋ねています:

文字列(コンマのみで区切られたツリー)を多次元配列()に変換するための最良の解決策は何ですか?

ps これが最善の質問方法かどうかはわかりません。

4

1 に答える 1