亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷相鄰列表

遍歷相鄰列表

PHP
叮當貓咪 2023-05-12 16:07:51
我正在嘗試獲取指定上線下所有用戶的列表。例如,上線 id 1 的下線為 (2,3,4,5,6)我的桌子看起來像這樣。+----------------------+-----+------+| line_id | upline_id| downline_id| main_upline_id|+----------------------+-----+------+| 1       |  0       |   1        |   0  || 2       |  1       |   2        |   1  || 3       |  2       |   3        |   1  || 4       |  3       |   4        |   1  || 5       |  1       |   5        |   1  || 6       |  5       |   6        |   1  || 7       |  0       |   7        |   0  || 8       |  7       |   8        |   7  || 9       |  8       |   9        |   7  || 10      |  9       |   10       |   7  |+----------------------+-----+------+還有我的代碼    public function downline($id, $array) {        $lineModel      = CLONEAPI::getModel( 'line' );        $data           = $lineModel->getAllById($id);        if (sizeof($data) != 0 )        {            foreach ($data as $child)            {                   $array[]    = $child;                // How do i rerun the loop until no more downline ids are found without writing a bunch of foreach loops?            }        }    }我如何編寫遞歸函數來獲取所有相關的下線 ID?
查看完整描述

2 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

確保你的函數返回一些東西——在循環完成之后(而不是在——就像你在問題的第一個版本中那樣)。


盡管您傳遞 an 的$array想法是填充它,但您需要確保數組是通過引用傳遞的,為此您必須使用語法&,否則調用者將看不到更改。


但是,我發現根本不指定該參數更簡潔(并且不推薦使用 PHP 的&語法——它有奇怪的副作用)。相反,讓函數返回數組。遞歸調用此函數的代碼應采用返回的數組并將其與它自己收集的內容合并:


public function downline($id) {

    $lineModel = CLONEAPI::getModel('line');

    $data = $lineModel->getAllById($id);

    $array = [];

    foreach ($data as $child) {

        $array[] = $child['downline_id'];

        $array = array_merge($array, downline($child['downline_id']);

    }

    return $array;

}


$result = downline($someParentId);


查看完整回答
反對 回復 2023-05-12
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

你的方法有效!雖然我對它做了一個小的編輯,以將包含現有數據的數組傳遞給下一個遞歸調用。


public function downline($id) {

    $lineModel = CLONEAPI::getModel('line');

    $data = $lineModel->getAllById($id);

    $array = [];

    foreach ($data as $child) {

     $temp[] = $child['downline_id'];

     $array = array_merge($array, $temp, downline($child['downline_id']);

    }

    return $array;

}


$result = downline($someParentId);

之后,我得到了一些重復的 id,我使用 array_unique 從中刪除了重復的值。


查看完整回答
反對 回復 2023-05-12
  • 2 回答
  • 0 關注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號