0

PHP を使用して、プレーン テキスト リストを連想配列に変換する最良の方法は何でしょうか。

プレーン テキスト リストの構造は次のようになります。

Item 1
Item 1 > Sub Item 1.1
Item 1 > Sub Item 1.2
Item 2 
Item 2 > Sub Item 2.1 > Sub Sub Item 2.1.1
Item 2 > Sub Item 2.1 > Sub Sub Item 2.1.2
Item 2 > Sub Item 2.1 > Sub Sub Item 2.1.2 > Sub Sub Sub Item 2.1.2.1
Item 2 > Sub Item 2.2 > Sub Sub Item 2.2.1
Item 2 > Sub Item 2.2 > Sub Sub Item 2.2.2
Item 3
Item 4
Item 4 > Sub Item 4.1

関数/メソッドは特定の深さに限定されません。

目的の配列は次のようになります。

$array['Item 1']['Sub Item 1.1'];
$array['Item 1']['Sub Item 1.2'];
$array['Item 2']['Sub Item 2.1'];
$array['Item 2']['Sub Item 2.1']['Sub Sub Item 2.1.1'];
$array['Item 2']['Sub Item 2.1']['Sub Sub Item 2.1.2'];
$array['Item 2']['Sub Item 2.1']['Sub Sub Item 2.1.2']['Sub Sub Sub Item 2.1.2.1'];
$array['Item 2']['Sub Item 2.2']['Sub Sub Item 2.2.1'];
$array['Item 2']['Sub Item 2.2']['Sub Sub Item 2.2.2'];
$array['Item 3'];
$array['Item 4'];
$array['Item 4']['Sub Item 4.1'];

これが採用するのに最適な配列構造であるかどうかはわかりません。

UI側で...

この配列は、jQuery.ajax を介して一連の階層ドロップダウン リストを設定するために使用されます。子リストの内容は、親の選択に依存します。

ユーザーがアイテム 2 を選択すると、サブアイテムを含む新しいリストが表示されます。たとえば、サブサブアイテム 2.1.2 を選択すると、3 つ目のリストが表示され、サブサブサブアイテム 2.1.2.1 が唯一のオプションとして表示されます。

私はすべてのjQueryのことを行うことができます.PHP関数だけが頭痛の種です!

関数の記述方法に影響を与える場合に備えて、配列で何をするつもりだったかの説明を含めました。

4

1 に答える 1

2

explode、参照割り当て、およびarray_shift:

$input = "Item 1
Item 1 > Sub Item 1.1
...
Item 4 > Sub Item 4.1";

$lines = explode("\n", $input);
$out = array();
foreach ($lines as $line) {
    $parts = explode(" > ", $line);
    $ref = &$out;
    while (count($parts) > 0) {
        if (isset($ref[$parts[0]]) === false) {
            $ref[$parts[0]] = array();
        }
        $ref = &$ref[$parts[0]];
        array_shift($parts);
    }
}
echo "<pre>";
print_r($out);

正しい出力が得られるようです。

于 2013-10-16T12:25:59.777 に答える