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,将出现一个带有子项目的新列表,例如,如果他们选择了 Sub Sub Item 2.1.2,那么第三个列表将显示 Sub Sub Sub Item 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 回答