[英]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.