簡體   English   中英

使用PHP從表中創建層次結構

[英]Make hierarchy from table with PHP

我在數據庫中有一個表,在這個表中我添加了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;
}

現在如果我用id 3調用這個方法就好了

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

它會像那樣回歸

Array(
    [0]=>name1
)

但我想在下面

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

我知道如果我們有父母,我會重新定義陣列,但我如何管理它。 我已經使用了array_push php函數,但它不符合我的條件。

            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)因為你做$array[$fetchAllData->parent_id] = $fetchAllData->name; 在if和else中,你在兩種情況下都這樣做,所以放棄了if..else 2)嘗試在原始數組中推送第二個調用的結果以獲得所需內容。

您的表中有唯一的ID,因此如果您調用查詢,它將始終只返回一個結果。 也許你想用這種方式編寫查詢:

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

如果你想得到給定ID及其父親的結果,你應該在調用$ this-> fetchSharedFolder(...)后添加它;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM