php 数据集转换树、递归重组节点信息多维数组(转)
生活随笔
收集整理的這篇文章主要介紹了
php 数据集转换树、递归重组节点信息多维数组(转)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、將數(shù)據(jù)集轉(zhuǎn)換成樹
/*** 將返回的數(shù)據(jù)集轉(zhuǎn)換成樹* @param array $list 數(shù)據(jù)集* @param string $pk 主鍵* @param string $pid 父節(jié)點(diǎn)名稱* @param string $child 子節(jié)點(diǎn)名稱* @param integer $root 根節(jié)點(diǎn)ID* @return array 轉(zhuǎn)換后的樹*/ function list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root=0) {$tree = array();// 創(chuàng)建Treeif(is_array($list)) {// 創(chuàng)建基于主鍵的數(shù)組引用$refer = array();foreach ($list as $key => $data) {$refer[$data[$pk]] =& $list[$key];}foreach ($list as $key => $data) {// 判斷是否存在parent$parentId = $data[$pid];if ($root == $parentId) {$tree[$data[$pk]] =& $list[$key];}else{if (isset($refer[$parentId])) {$parent =& $refer[$parentId];$parent[$child][] =& $list[$key];}}}}return $tree; }轉(zhuǎn)換前:
轉(zhuǎn)換后:
array(3) {[11] => array(4) {["code"] => int(11)["name"] => string(9) "安徽省"["sup_code"] => string(1) "0"["son"] => array(2) {[0] => array(4) {["code"] => int(114)["name"] => string(9) "蚌埠市"["sup_code"] => string(2) "11"["son"] => array(1) {[0] => array(3) {["code"] => int(1141)["name"] => string(12) "龍子湖區(qū)"["sup_code"] => string(3) "114"}}}[1] => array(4) {["code"] => int(115)["name"] => string(9) "蕪湖市"["sup_code"] => string(2) "11"["son"] => array(1) {[0] => array(3) {["code"] => int(1151)["name"] => string(9) "弋江區(qū)"["sup_code"] => string(3) "115"}}}}}[22] => array(4) {["code"] => int(22)["name"] => string(9) "浙江省"["sup_code"] => string(1) "0"["son"] => array(2) {[0] => array(4) {["code"] => int(221)["name"] => string(9) "杭州市"["sup_code"] => string(2) "22"["son"] => array(5) {[0] => array(3) {["code"] => int(2211)["name"] => string(9) "西湖區(qū)"["sup_code"] => string(3) "221"}[1] => array(3) {["code"] => int(2212)["name"] => string(9) "上城區(qū)"["sup_code"] => string(3) "221"}[2] => array(3) {["code"] => int(2213)["name"] => string(9) "下城區(qū)"["sup_code"] => string(3) "221"}[3] => array(3) {["code"] => int(2215)["name"] => string(9) "拱墅區(qū)"["sup_code"] => string(3) "221"}[4] => array(3) {["code"] => int(2216)["name"] => string(9) "蕭山區(qū)"["sup_code"] => string(3) "221"}}}[1] => array(4) {["code"] => int(222)["name"] => string(9) "嘉興市"["sup_code"] => string(2) "22"["son"] => array(1) {[0] => array(3) {["code"] => int(2221)["name"] => string(9) "南湖區(qū)"["sup_code"] => string(3) "222"}}}}}[33] => array(3) {["code"] => int(33)["name"] => string(9) "山東省"["sup_code"] => string(1) "0"}}二、遞歸重組節(jié)點(diǎn)信息多維數(shù)組字段???
方法一
/*** 遞歸重組節(jié)點(diǎn)信息多維數(shù)組* @param [array] $node [要處理的節(jié)點(diǎn)數(shù)組:二維數(shù)組]* @param [int] $root [根節(jié)點(diǎn)id]* @return [array] [樹狀結(jié)構(gòu)的節(jié)點(diǎn)體系:多維數(shù)組]*/ function node_merge($node,$root=0){$arr = array();foreach ($node as $v) {if ($v['pid'] == $root) {$v['child']=node_merge($node,$v['id']);$arr[]=$v;}}return $arr; }方法二:
/*** 遞歸重組節(jié)點(diǎn)信息多維數(shù)組* @param [array] $node [要處理的節(jié)點(diǎn)數(shù)組:二維數(shù)組]* @param [int] $pid [父級ID]* @param [array] $pidArr [父節(jié)點(diǎn)數(shù)組]* @return [array] [樹狀結(jié)構(gòu)的節(jié)點(diǎn)體系:多維數(shù)組]*/ function node_merge_gai($node,$pid=0,$pidArr){$arr = array();foreach ($node as $v) {if ($v['pid'] == $pid) {if(in_array($v['id'],$pidArr)){$v['child']=node_merge($node,$v['id'],$pidArr);}$arr[]=$v;}}return $arr; }
調(diào)用方法如下圖:
此處調(diào)用函數(shù)array_column是PHP5.5+版本才可支持,此處可以自定義方法,如下
/*** 二維數(shù)組轉(zhuǎn)一維數(shù)組【實(shí)現(xiàn)低版本PHP支持】* @param array $array 多維數(shù)組* @param string $column_key 需要返回值的列* @param string $index_key 用作返回?cái)?shù)組的索引/鍵的列* @return array()*/ if (!function_exists("array_column")) {function array_column(array &$rows, $column_key, $index_key = null) {$data = array();if (empty($index_key)) {foreach ($rows as $row) {$data[] = $row[$column_key];}} else {foreach ($rows as $row) {$data[$row[$index_key]] = $row[$column_key];}}return $data;} }返回結(jié)果如:
array(4) {[0] => array(5) {["id"] => int(1)["name"] => string(5) "Index"["title"] => string(6) "首頁"["pid"] => string(1) "0"["child"] => array(2) {[0] => array(5) {["id"] => int(9)["name"] => string(8) "Category"["title"] => string(6) "分類"["pid"] => string(1) "1"["child"] => array(0) {}}[1] => array(5) {["id"] => int(10)["name"] => string(5) "Store"["title"] => string(6) "店鋪"["pid"] => string(1) "1"["child"] => array(0) {}}}}[1] => array(5) {["id"] => int(2)["name"] => string(5) "Admin"["title"] => string(6) "后臺"["pid"] => string(1) "0"["child"] => array(4) {[0] => array(5) {["id"] => int(5)["name"] => string(5) "Trade"["title"] => string(12) "交易管理"["pid"] => string(1) "2"["child"] => array(0) {}}[1] => array(5) {["id"] => int(6)["name"] => string(6) "Redbag"["title"] => string(12) "紅包管理"["pid"] => string(1) "2"["child"] => array(0) {}}[2] => array(5) {["id"] => int(7)["name"] => string(5) "Order"["title"] => string(12) "訂單管理"["pid"] => string(1) "2"["child"] => array(0) {}}[3] => array(5) {["id"] => int(8)["name"] => string(7) "Manager"["title"] => string(9) "管理員"["pid"] => string(1) "2"["child"] => array(0) {}}}}[2] => array(5) {["id"] => int(3)["name"] => string(4) "Home"["title"] => string(12) "圖片中心"["pid"] => string(1) "0"["child"] => array(0) {}}[3] => array(5) {["id"] => int(4)["name"] => string(6) "Member"["title"] => string(12) "會員中心"["pid"] => string(1) "0"["child"] => array(3) {[0] => array(5) {["id"] => int(11)["name"] => string(4) "Fund"["title"] => string(6) "余額"["pid"] => string(1) "4"["child"] => array(0) {}}[1] => array(5) {["id"] => int(12)["name"] => string(7) "Product"["title"] => string(6) "產(chǎn)品"["pid"] => string(1) "4"["child"] => array(3) {[0] => array(5) {["id"] => int(14)["name"] => string(3) "Out"["title"] => string(9) "賣出的"["pid"] => string(2) "12"["child"] => array(0) {}}[1] => array(5) {["id"] => int(15)["name"] => string(4) "Sale"["title"] => string(9) "在售的"["pid"] => string(2) "12"["child"] => array(0) {}}[2] => array(5) {["id"] => int(16)["name"] => string(2) "In"["title"] => string(9) "倉庫的"["pid"] => string(2) "12"["child"] => array(0) {}}}}[2] => array(5) {["id"] => int(13)["name"] => string(5) "Agent"["title"] => string(12) "代理關(guān)系"["pid"] => string(1) "4"["child"] => array(0) {}}}} }
轉(zhuǎn)載于:https://www.cnblogs.com/yszr/p/9405381.html
總結(jié)
以上是生活随笔為你收集整理的php 数据集转换树、递归重组节点信息多维数组(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: datatables 获取 pageLe
- 下一篇: PHP 的 Phar 包原来性能这么强!