使用PHP从表中创建层次结构

时间:2016-06-16 08:04:40

标签: php logic joomla2.5 hierarchy joomla3.0

我在数据库中有一个表,在这个表中我添加了3列i,name,parent_id.please见下文。

    ID | name | parent_id

    1    name1   0
    2    name2   1
    3    name3   1

现在我想从数据库中获取此ID。我在PHP中创建了一个方法,并从数据库中逐个获取数据。请看下面的

function getData($id)
{
            $array = array();
            $db = JFactory::getDBO();
            $sql = "SELECT * from table_name when id = ".$id;
            $db>setQuery($sql);
            $fetchAllDatas = $db->getObjectList();

            foreach ($fetchAllDatas as  $fetchAllData) 
            {
                if($fetchAllData->parent_id > 0)
                {
                    $array[$fetchAllData->parent_id] = $fetchAllData->name;
                    $this->getData($fetchAllData->parent_id);
                }
                else 
                {
                    $array[$fetchAllData->parent_id] = $fetchAllData->name;
                }   
            }
            return $array;
}

现在,如果我将此方法称为<3,如

$this->getData(3); // has a parent 

它会像那样返回

Array(
    [0]=>name1
)

但我想在下面

Array(
    [1]=>name3,
    [0]=>name1
)

我知道如果我们有父母,我会重新定义数组,但我如何管理它。 我已经使用了array_push php函数,但它不符合我的条件。

2 个答案:

答案 0 :(得分:1)

            foreach ($fetchAllDatas as  $fetchAllData) 
            {
            $array[$fetchAllData->parent_id] = $fetchAllData->name;
            if($fetchAllData->parent_id > 0)
                    array_push($array,$this->getData($fetchAllData->parent_id));                 
            }
            return $array;

1)因为您在if和else中执行了$array[$fetchAllData->parent_id] = $fetchAllData->name;,所以在这两种情况下执行此操作都是if..else。 2)尝试在原始数组中推送第二次调用的结果,以获得您想要的结果。

答案 1 :(得分:-1)

您的表格中有唯一的ID,因此如果您调用查询,它将始终只返回一个结果。也许你想用这种方式编写查询:

$sql = "SELECT * from table_name when parent_id = ".$id;

如果您想获得具有给定ID及其父级的结果,您应该在调用$ this-&gt; fetchSharedFolder(...)后添加此内容;

$array = array_merge($array, $this->getData($fetchAllData->parent_id));