本文目錄一覽:
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