簡體   English   中英

使用 CodeIgniter 的遞歸數據庫查詢(已修復)

[英]Recursive database queries using CodeIgniter (fixed)

我需要從我的表中獲取類別 ID,我的表是這樣的;

categories
id| name                    |parent
1 | shoes                   |0
2 | women_shoes             |1
3 | man_shoes               |1
4 | sweets                  |0
5 | man_sweets              |4
6 | women_sweets            |4
7 | women_red_sweets        |6
8 | women_green_sweets      |6
9 | men_blue_sweets         |5

我使用 Codeigniter 3 並且我需要一個具有類別 ID 的數組,這是幫助程序文件中的 PHP 代碼;

function categories_list($id = 0, &$list = array()) { /// parent_id
    $ci = & get_instance();
    $cat = $ci->db->select("*")
                 ->from("categories")
                 ->where("parent",$id)
                 ->get()->result();
           
    foreach ($cat as $value) {
        array_push($list,$value->id);
        categories_list($list->id,$list);
    }
    return ($list);
}

$liste = categories_list(0);
print_r($liste);

此代碼僅打印array(1,4) ,但我需要這樣的數組: array(1,2,3,4,5,6,7,8)

我怎樣才能正確地創建這個?

修正我應該在$list=array()之前使用&字符作為參考,它應該是&$list=array()

當您遞歸調用categorie_list()時,您實際上並沒有將其返回的數組提供給當前級別的數組有效負載。 這可以通過array_merge()array_push()和擴展運算符來完成。 由於類別數據,這將包含冗余 ID。 如果要刪除重復項,可以調用array_unique()

以下代碼片段應該能夠幫助您繼續前進,以便您可以改進您的方法。

代碼:(非CodeIgniter PHPize.online Demo

function categories_list($id = 0, $list = []) {
    $ci = &get_instance();
    foreach ($ci->db->get_where('categories', ['parent', $id])->result() as $row) {
        $list[] = $row->id;
        array_push($list, ...categories_list($row->id, $list));
    }
    return array_unique($list);
}

var_export(categories_list());

暫無
暫無

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

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