php遞歸實現無限級分類並展示(php 遞歸函數無限級分類)

本文目錄一覽:

php 遞歸問題,想要將數據按照無限極分類的樣式顯示出來

首先 將json 解碼成數組, 用json_decode 函數 注意 一定要加上第二個參數 否則他會返回一個對象。接下來就是地遞歸了。這是一個最簡單的遞歸只要逐個遍歷即可。

下面是完整的代碼:

$data= json_decode($str,true);

$options = getChildren($data);

function getChildren($parent,$deep=0) {

foreach($parent as $row) {

$data[] = array(“id”=$row[‘id’], “name”=$row[‘name’],”pid”=$row[‘parentid’],’deep’=$deep);

if ($row[‘childs’]) {

$data = array_merge($data, getChildren($row[‘childs’], $deep+1));

}

}

return $data;

}

?

select name=”” id=””

?php  foreach ($options as $row) { ?

option value=”?php echo $row[‘id’] ?”?php echo str_pad(“”,$row[‘deep’]*3, “-“,STR_PAD_RIGHT); ??php echo $row[‘name’]; ?/option

?php } ?

/select

以上代碼已測試通過 效果圖如下

php 幾種常用的遞歸 無限極分類

 /**

     * 遞歸實現無限極分類

     * @param $array 分類數據

     * @param $pid 父ID

     * @param $level 分類級別

     * @return $list 分好類的數組 直接遍歷即可 $level可以用來遍歷縮進

     */

    function getTree($array, $pid =0, $level = 0){

        //聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋

        static $list = [];        foreach ($array as $key = $value){            //第一次遍歷,找到父節點為根節點的節點 也就是pid=0的節點

            if ($value[‘pid’] == $pid){                //父節點為根節點的節點,級別為0,也就是第一級

                $value[‘level’] = $level;                //把數組放到list中

                $list[] = $value;                //把這個節點從數組中移除,減少後續遞歸消耗

                unset($array[$key]);                //開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1

                getTree($array, $value[‘id’], $level+1);

            }

        }

php無限極分類實現的方法?

初始化的數據

//初始化原始數據(id=編號,name=顯示名稱,pid=父級目錄id,sort=排序順序)$data[1] = array(‘id’=’1′,’name’=’一級目錄A’,’pid’=’0′,’sort’=’1′);

$data[2] = array(‘id’=’2′,’name’=’一級目錄B’,’pid’=’0′,’sort’=’2′);

$data[3] = array(‘id’=’3′,’name’=’一級目錄C’,’pid’=’0′,’sort’=’3′);

$data[4] = array(‘id’=’4′,’name’=’一級目錄D’,’pid’=’0′,’sort’=’4′);

$data[5] = array(‘id’=’5′,’name’=’二級目錄A-1′,’pid’=’1′,’sort’=’1’);

$data[6] = array(‘id’=’6′,’name’=’二級目錄A-2′,’pid’=’1′,’sort’=’2’);

$data[7] = array(‘id’=’7′,’name’=’二級目錄A-3′,’pid’=’1′,’sort’=’3’);

$data[8] = array(‘id’=’8′,’name’=’二級目錄B-1′,’pid’=’2′,’sort’=’1’);

$data[9] = array(‘id’=’9′,’name’=’二級目錄B-2′,’pid’=’2′,’sort’=’2’);

$data[10] = array(‘id’=’10’,’name’=’二級目錄B-3′,’pid’=’2′,’sort’=’3′);

$data[11] = array(‘id’=’11’,’name’=’二級目錄C-1′,’pid’=’3′,’sort’=’2′);

$data[12] = array(‘id’=’12’,’name’=’二級目錄D-1′,’pid’=’4′,’sort’=’1′);

$data[13] = array(‘id’=’13’,’name’=’二級目錄D-2′,’pid’=’4′,’sort’=’2′);

$data[14] = array(‘id’=’14’,’name’=’三級目錄A-2-1′,’pid’=’6′,’sort’=’1′);

$data[15] = array(‘id’=’15’,’name’=’三級目錄A-2-2′,’pid’=’6′,’sort’=’2′);

$data[16] = array(‘id’=’16’,’name’=’三級目錄C-1-1′,’pid’=’11’,’sort’=’1′);

$data[17] = array(‘id’=’17’,’name’=’三級目錄B-2-1′,’pid’=’9′,’sort’=’2′);

顯示樹結構

function printTree($data,$level=0){    foreach($data as $key=$value){        for($i=0;$i=$level;$i++){            echo ’emsp;emsp;’;

        }        echo $value[‘name’];        echo ‘br’;        if(!empty($value[‘children’])){

            printTree($value[‘children’],$level+1);

        }

    }

}

使用遞歸的方式獲取無限極分類數組

function getNodeTree($list,$tree,$pid=0){    foreach($list as $key=$value){        if($pid == $value[‘pid’]){

            $tree[$value[‘id’]]=$value;            unset($list[$key]);

            getNodeTree($list,$tree[$value[‘id’]][‘children’],$value[‘id’]);

        }

    }

}

使用引用-無限極分類

function createNodeTree($list,$tree){    foreach($list as $key=$node){        if(isset($list[$node[‘pid’]])){

            $list[$node[‘pid’]][‘children’][] = $list[$key];

        }else{

            $tree[] = $list[$node[‘id’]];

        }

    }

}

調用

//遞歸-無限極分類調用getNodeTree($data,$tree);

printTree($tree);//使用引用-無限極分類調用createNodeTree($data,$tree);

printTree($tree);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245709.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:10
下一篇 2024-12-12 13:10

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • 分段函數Python

    本文將從以下幾個方面詳細闡述Python中的分段函數,包括函數基本定義、調用示例、圖像繪製、函數優化和應用實例。 一、函數基本定義 分段函數又稱為條件函數,指一條直線段或曲線段,由…

    編程 2025-04-29

發表回復

登錄後才能評論