使用root和子类别指定数组

时间:2013-02-08 17:08:07

标签: php mysql arrays recursion

使用PHP和MySQL。

我有一个只包含三个字段的表格(类别), ID 名称父级

在根类别为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

我们怎么能返回一个包含root及其所有子节点的数组?例如,对于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并尝试了一些变化,但我还没有成功。

1 个答案:

答案 0 :(得分:1)

此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;
    }