php - 指定具有根类别和子类别的数组

标签 php mysql arrays recursion

使用 PHP 和 MySQL。

我有一个表(类别),仅包含三个字段:id名称父级

其中 parent 在根类别上为 0,如果派生自另一个类别,则为整数。

但是我们可以在其中有多个级别,例如:

id, name, parent
01, Name 01, 00
02, Name 02, 00
03, Name 03, 00
04, Name 04, 02
05, Name 05, 01
06, Name 06, 01
07, Name 07, 05
08, Name 07, 05
09, Name 09, 04
10, Name 10, 07
11, Name 11, 10

我们如何返回一个包含根及其所有子节点的数组?例如,对于 id=1,数组应为:

array (
    1 => array(
        id => 1,
        name => 'Name 1'
    ),
    5 => array(
        id => 5,
        name => 'Name 5'
    ),
    6 => array(
        id => 6,
        name => 'Name 6'
    ),
    7 => array(
        id => 7,
        name => 'Name 7'
    ),
    8 => array(
        id => 8,
        name => 'Name 8'
    ),
    10 => array(
        id => 10,
        name => 'Name 10'
    ),
    11 => array(
        id => 11,
        name => 'Name 11'
    )
);

我看过这个link并尝试了一些变化,但我还没有成功。

最佳答案

这个 SQL 查询应该会得到你想要的数据:

    SELECT DISTINCT c.id as id, c.name as name FROM category c, category s WHERE s.parent = $id OR c.id = $id;

然后你可以使用mysqli_fetch_assoc获取您需要的数组的一部分。如果您需要数组索引与 SQL 索引相匹配,那么您可以迭代 mysqli_fetch_assoc 的结果并将其放入新数组中:

    $target = array();
    while ( $row = mysqli_fetch_assoc( $result ) ) {
         $target[$row["id"]] = $row;
    }

关于php - 指定具有根类别和子类别的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777733/

相关文章:

php - 如何从2个表中输出表格数据?

php - 仅获取 Group By 返回的最高值

mysql - 仅当有新图像要上传时才取消链接

php - SQL注入(inject)似乎不起作用

c - C中动态分配数组的数组

php - 在 Windows 和 Linux 上获取绝对 URL 路径

php - 数据库返回错误,无法弄清楚我哪里出错了?

php - SQL 和 php array()。在任意插入顺序/更新后保证查询顺序的优雅方法

c++ - CUDA Thrust - 计算匹配子数组

javascript - 如何在 javascript 中获取 Google DataTable 的最后一行?