在PHP中使用父项和子项(按类别)对查询进行排序

时间:2011-09-13 02:35:37

标签: php arrays tree

我有一个SQLite数据库,其中包含一个名为“library”的表,其中包含3个字段(12php sMb)

ID(唯一标识符)// libraryName,包含一个字符串// parentLibId,包含父库的ID。

如果库位于“root”中,则parentLibId为Null(空)

我需要一个数组,它将返回一个父节点和子节点从根开始的树。

如果没有太多代码,任何人都知道如何做到这一点?

$dbh = new PDO('sqlite:my.sqlite') or die("Error 0xDB0001");
$sth = $dbh->prepare("SELECT * FROM library");
$sth->execute();
$result = $sth->fetchAll();

我有时间处理我的朋友给出的页面限制作为一个小竞争,这部分我无法弄清楚,我使用了一个代码,但它太长了,我觉得愚蠢的XD

欢迎任何帮助,如果我不清楚,只需说出来,我会提供更多细节。

非常感谢您的帮助,非常感谢!!

祝大家晚安!

1 个答案:

答案 0 :(得分:1)

此功能未经过测试。这是主要的想法。

getTree();

function getTree($child = null)
{
    $dbh = new PDO('sqlite:my.sqlite') or die("Error 0xDB0001");

    //It's just example. Security and best practice is your problem :p
    if ($child)
        $where = 'parentLibId = ' . $child;
    else
        $where = 'parentLibId IS NULL ';

    $sth = $dbh->prepare("SELECT * FROM library" . $where);
    $sth->execute();

    if ($child)
    {
        $result = $sth->fetchAll()
        $return = $result;
    }else{ //get parents
        while ($result = $sth->fetch())
        {
            //one by one
            $return[] = array(  'parent' => $result, //parent info
                                'childs' => getTree($result['id']) //childs
                            );
        }
    }

    return $return;
}