PHP 处理数据为树状结构
2023-02-18 16:33:32 时间
本文已同步发布于个人站点 https://qiucode.cn/article/105 文末点击阅读原文也可到达
1、从数据库获取的数据
2、对查询出来的数据按键值归类
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\Log;
class Data extends Controller {
public function getTreeData(){
$res = Db::table('table_name')
->select();
$erArr = self::getRepeatValGroup($res,'platform');
Log::info($erArr);
$newArr = [];
foreach($erArr as $erK => $erV){
$arr1 = [];
foreach ($erV as $k => $v) {
$arr1[$v['area']][] = $v;
}
$newArr[$erK][]=$arr1;
}
return json($newArr);
}
//$arr= 一个数组。$keys 是该数组里面的某一个值 该自定义函数主要是对二维数组里面的某一个值进行分组
public function getRepeatValGroup($arr,$keys)
{
if(!is_array($arr) || !$keys) {
return false;
}
$temp = array();
foreach($arr as $key=>$val) {
$temp[$val[$keys]][] = $val;
}
return $temp;
}
}
3、页面通过ajax请求接口,使用第三方书组件
$.ajax({
type:"get",
url:"/index/channels/getPlatform",
success:function(data){
let platformArr = []
Object.keys(data).map(platform => {
let areaArr = []
data[platform].forEach(areaKey =>{
//console.log('.........................')
//console.log(areaKey)
Object.keys(areaKey).map(area => {
//console.log('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<')
///console.log(area)
//console.log('-------------区域-----------------------')
//console.log(areaKey[area])
let countryArr = []
areaKey[area].forEach(country =>{
countryArr.push({
id:country.channel_no,
active: country.active,
//parentId:data2[0].area,
label:country.country
})
})
areaArr.push({
label:area,
children:countryArr
})
})
})
if(platform == 'Amazon'){
platformArr.unshift({
label: 'Amazon',
children:areaArr
})
}else{
platformArr.push({
label: platform,
children:areaArr
})
}
})
}
})
相关文章
- 每月一更的《HelloGitHub》第 58 期,来啦!
- 命名秘籍周获近五千星——GitHub 热点速览 v.21.04
- 摆脱 996——GitHub 热点速览 v.21.03
- 500 份源码合集——GitHub 热点速览 v.21.02
- 自托管服务清单——GitHub 热点速览 v.21.01
- HelloGitHub 月刊最受欢迎的开源项目 Top10(2020 年)
- 国产的开源数据库——GitHub 热点速览 Vol.52
- 《HelloGitHub》第 57 期
- 回顾 2020 年 GitHub 的大事件,你知道多少?
- 它听键盘声就知道你敲的是什么——GitHub 热点速览 Vol.51
- GitHub 上的大佬们打完招呼,会聊些什么?
- 马赛克密码破解——GitHub 热点速览 Vol.50
- 在 GitHub 玩硬件——GitHub 热点速览 Vol.49
- 适合 JS 新手学习的开源项目——在 GitHub 学编程
- 实用主义当道——GitHub 热点速览 Vol.48
- 《HelloGitHub》第 56 期
- 适合 Java 新手的开源项目集合——在 GitHub 学编程
- 超强工具集——GitHub 热点速览 Vol.47
- 适合 Go 新手学习的开源项目——在 GitHub 学编程
- 变强——GitHub 热点速览 Vol.46