从MySQL将标签列表转换为结构化数组的最佳方法?

时间:2018-08-09 20:56:19

标签: php mysql laravel

我的数据库存储这样的列表:

ID | name
--- -----
1  | search
2  | search.categories
3  | search.categories.accessories
4  | search.categories.accessories.glasses
5  | search.categories.accessories.hats
6  | filters
7  | filters.payments
8  | filters.payments.creditcard
9  | filters.payments.debitcard

现在我想像这样递归地选择它:

[
    name, childs[
        name, childs[ ... ],
        name, childs[ ... ],
        name, childs[
            name, childs[ ... ],
            name, childs[ ... ],
        ],
    ],
    name, childs[
        name, childs[ ... ],
        name, childs[ ... ],
        name, childs[
            name, childs[ ... ],
            name, childs[ ... ],
        ],
    ]
]

实现这一目标的最佳方法是什么?直接从MySQL还是手动进行字符串处理?

1 个答案:

答案 0 :(得分:1)

如果您正在使用Laravel,则可以使用array_set并使用表的 name 列作为键来构建嵌套数组,以充分利用您已经存储的点符号

尽管您没有公开此功能的目的以及为什么要以这种方式构建此结构,但遵循一种可能的方法。

  • 初始化一个空数组($structure = []
  • 检索所有表记录以对其进行迭代(根据需要使用数据库选择或模型获取)
  • 对于每个表行,执行一个array_set($structure, $listname, $value)

在您的示例中,我看不到$value的来源,但我想您会理解的。

$structure = [];
foreach($rows as $row)
{
    array_set($structure, $row->name, $value);
}