簡體   English   中英

獲取每一行的遞歸深度

[英]Get recursive depth for every row

我有以下數據庫表

在此處輸入圖片說明

82是84的父級。24是82和83的父級。在php中,我有一種通過uid獲取行的方法。

public function fetchByUid($uid){
    //code
}

這將從表中檢索第7和第6值。 現在,我不僅要獲取uid相等的行,而且還要獲取父作為uid的孩子的行。 例如82是84的父母,也是24的孩子。

所以我想出了一些遞歸。

public function fetchByUidRec($uid, $data, $counter){
    //set of rows by uid
    $db_resultSet;

    foreach($db_resultSet as $row){
        $entry = array();
        $entry['id'] = $row->id;
        $entry['uid'] = $row->uid;
        $entry['rid'] = $row->rid;
        $entry['layer'] = $counter;
        $data [] = $entry;

        //now I want to do the same on the child
        $data [] = fetchByUidRec($row->rid, $data, $counter = $counter + 1)
    }

    return $data;
}

public function getchByUid($uid){
   $data = array();
   $counter = 0;

   return fetchByUidRec($uid, $data, $counter)
}

但這根本不起作用:(我想將當前的推入深度存儲在$ data ['layer']中

有任何想法嗎?

如果我正確理解您的意見:

$rows = array
(
    0 => array('id' => 8, 'uid' => 82, 'rid' => 84),
    1 => array('id' => 7, 'uid' => 24, 'rid' => 82),
    2 => array('id' => 6, 'uid' => 24, 'rid' => 83),
);

function fetchByUidRec($uid, $counter = 0)
{
    global $rows;

    // or in your case
    // $rows = SELECT FROM table WHERE uid = $uid;

    $data = array();

    foreach ($rows as $row)
    {
        if ($row['uid'] == $uid)
        {
            $data[] = array_merge($row, array('layer' => $counter));
            $data = array_merge($data, fetchByUidRec($row['rid'], $counter++));
        }
    }

    return $data;
}

范例

echo '<pre>';
print_r(fetchByUidRec(24));
echo '</pre>';

輸出

Array
(
    [0] => Array
        (
            [id] => 7
            [uid] => 24
            [rid] => 82
            [layer] => 0
        )

    [1] => Array
        (
            [id] => 8
            [uid] => 82
            [rid] => 84
            [layer] => 0
        )

    [2] => Array
        (
            [id] => 6
            [uid] => 24
            [rid] => 83
            [layer] => 1
        )
)

暫無
暫無

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

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