**將一個平面的二維數組按照指定的字段轉換為樹狀結構**
* * * * *
**代碼:**
~~~
function toTree($arr, $key_node_id, $key_parent_id = 'parent_id', $key_childrens = 'children', $treeIndex = false, & $refs = null) {
$refs = array ();
foreach ( $arr as $offset => $row ) {
$arr [$offset] [$key_childrens] = array ();
$refs [$row [$key_node_id]] = & $arr [$offset];
}
$tree = array ();
foreach ( $arr as $offset => $row ) {
$parent_id = $row [$key_parent_id];
if ($parent_id) {
if (! isset ( $refs [$parent_id] )) {
if ($treeIndex) {
$tree [$offset] = & $arr [$offset];
} else {
$tree [] = & $arr [$offset];
}
continue;
}
$parent = & $refs [$parent_id];
if ($treeIndex) {
$parent [$key_childrens] [$offset] = & $arr [$offset];
} else {
$parent [$key_childrens] [] = & $arr [$offset];
}
} else {
if ($treeIndex) {
$tree [$offset] = & $arr [$offset];
} else {
$tree [] = & $arr [$offset];
}
}
}
return $tree;
}
~~~
**調用:**
~~~
$rows = array(
array('id' => 1, 'value' => '1-1', 'parent' => 0),
array('id' => 2, 'value' => '2-1', 'parent' => 0),
array('id' => 3, 'value' => '3-1', 'parent' => 0),
array('id' => 7, 'value' => '2-1-1', 'parent' => 2),
array('id' => 8, 'value' => '2-1-2', 'parent' => 2),
array('id' => 9, 'value' => '3-1-1', 'parent' => 3),
array('id' => 10, 'value' => '3-1-1-1', 'parent' => 9),
);
$tree = Helper_Array::tree($rows, 'id', 'parent', 'nodes');
dump($tree);
//輸出結果:
array(
array('id' => 1, ..., 'nodes' => array()),
array('id' => 2, ..., 'nodes' => array(
array(..., 'parent' => 2, 'nodes' => array()),
array(..., 'parent' => 2, 'nodes' => array()),
),
array('id' => 3, ..., 'nodes' => array(
array('id' => 9, ..., 'parent' => 3, 'nodes' => array(
array(..., , 'parent' => 9, 'nodes' => array(),
),
),
)
~~~
- 前言
- 軟件流程
- 快速體驗
- 需求分析
- 系統設計
- 數據庫設計
- 框架搭建
- 前端開發
- HTML
- CSS
- JavaScript
- Jquery
- 服務端開發
- PHP入門
- PHP開發環境搭建
- PHP基礎
- PHP字符串String
- PHP數組Array
- PHP時間Date
- PHP面向對象
- PHP函數封裝
- PHP類庫
- PHP-MYSQL
- 系統測試
- 開發測試
- 單元測試
- 集成測試
- 系統測試
- 部署上線
- 環境部署
- 權限設置
- 網站配置
- 上線運營
- 系統維護
- 前端技術點
- HTML
- HTML5結構
- CSS
- CSS3實現鼠標移動到圖片上圖片變大
- 微信開發
- 公眾號區別
- 微信支付接口
- 擴展:API
- 1.網站QQ登錄的實現
- 2.網站微信掃描登錄的實現
- 擴展:插件
- H5上傳插件
- H5文件上傳插件
- 擴展:函數
- 1.數組轉數
- 2.移除數組空元素
- 3.返回數組中指定鍵的值
- 4.數組按照指定字段的值分組
- 5.網頁無圖片或者圖片不存在自動顯示默認圖
- 6.返回客戶端IP地址
- 7.當數據不顯示為空的時候顯示默認值
- 擴展:類庫【面向對象】
- 類的定義和使用
- 擴展:Mysql
- mysql基礎
- 擴展:Linux
- Linux常用命令
- Linux創建svn
- ThinkPHP5專欄
- TP5專欄解讀
- 教你怎么使用TP5
- 問題解決篇
- 網頁直接打開PDF或強制下載以及header和content-type參數詳解
- 讓PHP去執行svn命令踩過的坑
- 微信開發 支付開發redirect_uri參數錯誤解決辦法
- 全棧開發實例一
- 1.需求分析
- 2.系統設計
- 3.數據庫設計
- 4.框架搭建
- 5.模塊設計
- 6.前端開發
- 7.這里小編就不更新了,太累人,直接上源碼給你們吧
- 結語
- 【新】github和packagist上的資源