加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 获取每行的递归深度

发布时间:2020-12-13 16:12:12 所属栏目:PHP教程 来源:网络整理
导读:我有以下数据库表 82是84的父级.24是82和83的父级.在php中我有一个通过uid获取行的方法. public function fetchByUid($uid){ //code} 这将从表中检索第7和第6个值.现在,我不仅要获取uid相等的行,还要获取父元素是uid子元素的行.例如. 82是84的父母,但也是24
我有以下数据库表

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,$counter = $counter + 1)
    }

    return $data;
}

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

   return fetchByUidRec($uid,$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,'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
        )
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读