
$cats = Db::name('cat')->select()->toArray();这样的数据。
array(6) {
[0]=>
array(5) {
["id"]=>
int(1)
["pid"]=>
int(0)
["cat_name"]=>
string(6) "手机"
["cat_img"]=>
string(55) "/storage/category/bc\91231321a92a7a6a6db99fa7db8f37.png"
["is_show"]=>
int(1)
}
[1]=>
array(5) {
["id"]=>
int(7)
["pid"]=>
int(0)
["cat_name"]=>
string(6) "厨具"
["cat_img"]=>
string(55) "/storage/category/01\c7232eb931fa3dd40f8b4946bd27fa.jpg"
["is_show"]=>
int(1)
}
[2]=>
array(5) {
["id"]=>
int(8)
["pid"]=>
int(7)
["cat_name"]=>
string(9) "电饭锅"
["cat_img"]=>
string(55) "/storage/category/2b\edd18255c4efcfc4a9982ce33671be.jpg"
["is_show"]=>
int(1)
}
[3]=>
array(5) {
["id"]=>
int(9)
["pid"]=>
int(0)
["cat_name"]=>
string(6) "服装"
["cat_img"]=>
string(55) "/storage/category/f6\655e2bed6b7bea027fb69a3c11a27c.jpg"
["is_show"]=>
int(1)
}
[4]=>
array(5) {
["id"]=>
int(10)
["pid"]=>
int(9)
["cat_name"]=>
string(6) "女装"
["cat_img"]=>
string(55) "/storage/category/84\f9e13fa3a6093990bf3de4e2da74a0.jpg"
["is_show"]=>
int(1)
}
[5]=>
array(5) {
["id"]=>
int(11)
["pid"]=>
int(1)
["cat_name"]=>
string(6) "华为"
["cat_img"]=>
string(55) "/storage/category/b4\a403d9874ed426bd5210a2f42c33f0.jpg"
["is_show"]=>
int(1)
}
}-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- 主机: localhost
-- 生成日期: 2022-05-23 18:02:43
-- 服务器版本: 5.7.26
-- PHP 版本: 7.3.4
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- 数据库: `kkk`
--
-- --------------------------------------------------------
--
-- 表的结构 `cat`
--
CREATE TABLE `cat` (
`id` int(10) UNSIGNED NOT NULL,
`pid` int(10) UNSIGNED NOT NULL,
`cat_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cat_img` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`is_show` tinyint(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 转存表中的数据 `cat`
--
INSERT INTO `cat` (`id`, `pid`, `cat_name`, `cat_img`, `is_show`) VALUES
(1, 0, '手机', '/storage/category/bc\\91231321a92a7a6a6db99fa7db8f37.png', 1),
(7, 0, '厨具', '/storage/category/01\\c7232eb931fa3dd40f8b4946bd27fa.jpg', 1),
(8, 7, '电饭锅', '/storage/category/2b\\edd18255c4efcfc4a9982ce33671be.jpg', 1),
(9, 0, '服装', '/storage/category/f6\\655e2bed6b7bea027fb69a3c11a27c.jpg', 1),
(10, 9, '女装', '/storage/category/84\\f9e13fa3a6093990bf3de4e2da74a0.jpg', 1),
(11, 1, '华为', '/storage/category/b4\\a403d9874ed426bd5210a2f42c33f0.jpg', 1);
--
-- 转储表的索引
--
--
-- 表的索引 `cat`
--
ALTER TABLE `cat`
ADD PRIMARY KEY (`id`);
--
-- 在导出的表使用AUTO_INCREMENT
--
--
-- 使用表AUTO_INCREMENT `cat`
--
ALTER TABLE `cat`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;第一步:把无限极分类里面的数据变成二维数组。二维数组的下标是每一条数据的id 第二步:为什么需要引用传递,而不用值传递。因为如果你想变化原来的值的话,就用引用传递吧。值传递不能的哦
public function getIndexGoods(){
$cats = Db::name('cat')->select()->toArray();
//$cats = tree($cats);
$catss=generateTree($cats); //
return json(['code'=>"200",'message'=>"成功","data"=>$catss]);
}function generateTree($array){
//第一步 构造数据
$items = array();
foreach($array as $value){
$items[$value['id']] = $value;
}
//第二部 遍历数据 生成树状结构
$tree = array();
foreach($items as $key => $item){
if(isset($items[$item['pid']])){//如果他是子类的话,注意:isset(0)的话(顶级分类),只能走else啊
$items[$item['pid']]['son'][] = &$items[$key];
}else{//如果他是一级分类的话,放进去。为什么使用&地址传值。因为他能修改值的结构啊。那这样,如果用引用传递的话,是怎么样的?最下面。
$tree[] = &$items[$key];
}
}
return $tree;
}

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\facade\Route;
Route::get('indexgoods','Goods/getIndexGoods');解析代码:
$items = array();
foreach($array as $value){
$items[$value['id']] = $value;
}array(6) {
[1]=>
array(5) {
["id"]=>
int(1)
["pid"]=>
int(0)
["cat_name"]=>
string(6) "手机"
["cat_img"]=>
string(55) "/storage/category/bc\91231321a92a7a6a6db99fa7db8f37.png"
["is_show"]=>
int(1)
}
[7]=>
array(5) {
["id"]=>
int(7)
["pid"]=>
int(0)
["cat_name"]=>
string(6) "厨具"
["cat_img"]=>
string(55) "/storage/category/01\c7232eb931fa3dd40f8b4946bd27fa.jpg"
["is_show"]=>
int(1)
}
[8]=>
array(5) {
["id"]=>
int(8)
["pid"]=>
int(7)
["cat_name"]=>
string(9) "电饭锅"
["cat_img"]=>
string(55) "/storage/category/2b\edd18255c4efcfc4a9982ce33671be.jpg"
["is_show"]=>
int(1)
}
[9]=>
array(5) {
["id"]=>
int(9)
["pid"]=>
int(0)
["cat_name"]=>
string(6) "服装"
["cat_img"]=>
string(55) "/storage/category/f6\655e2bed6b7bea027fb69a3c11a27c.jpg"
["is_show"]=>
int(1)
}
[10]=>
array(5) {
["id"]=>
int(10)
["pid"]=>
int(9)
["cat_name"]=>
string(6) "女装"
["cat_img"]=>
string(55) "/storage/category/84\f9e13fa3a6093990bf3de4e2da74a0.jpg"
["is_show"]=>
int(1)
}
[11]=>
array(5) {
["id"]=>
int(11)
["pid"]=>
int(1)
["cat_name"]=>
string(6) "华为"
["cat_img"]=>
string(55) "/storage/category/b4\a403d9874ed426bd5210a2f42c33f0.jpg"
["is_show"]=>
int(1)
}
}然后遍历成树形结构:
{
"code": "200",
"message": "成功",
"data": [
{
"id": 1,
"pid": 0,
"cat_name": "手机",
"cat_img": "/storage/category/bc\\91231321a92a7a6a6db99fa7db8f37.png",
"is_show": 1,
"son": [
{
"id": 11,
"pid": 1,
"cat_name": "华为",
"cat_img": "/storage/category/b4\\a403d9874ed426bd5210a2f42c33f0.jpg",
"is_show": 1
}
]
},
{
"id": 7,
"pid": 0,
"cat_name": "厨具",
"cat_img": "/storage/category/01\\c7232eb931fa3dd40f8b4946bd27fa.jpg",
"is_show": 1,
"son": [
{
"id": 8,
"pid": 7,
"cat_name": "电饭锅",
"cat_img": "/storage/category/2b\\edd18255c4efcfc4a9982ce33671be.jpg",
"is_show": 1
}
]
},
{
"id": 9,
"pid": 0,
"cat_name": "服装",
"cat_img": "/storage/category/f6\\655e2bed6b7bea027fb69a3c11a27c.jpg",
"is_show": 1,
"son": [
{
"id": 10,
"pid": 9,
"cat_name": "女装",
"cat_img": "/storage/category/84\\f9e13fa3a6093990bf3de4e2da74a0.jpg",
"is_show": 1
}
]
}
]
}如果不用引用传递的后果:(只找到了顶级分类.为什么呢?因为不能修改原来值的结构啊。引用能的啊)
{
"code": "200",
"message": "成功",
"data": [
{
"id": 1,
"pid": 0,
"cat_name": "手机",
"cat_img": "/storage/category/bc\\91231321a92a7a6a6db99fa7db8f37.png",
"is_show": 1
},
{
"id": 7,
"pid": 0,
"cat_name": "厨具",
"cat_img": "/storage/category/01\\c7232eb931fa3dd40f8b4946bd27fa.jpg",
"is_show": 1
},
{
"id": 9,
"pid": 0,
"cat_name": "服装",
"cat_img": "/storage/category/f6\\655e2bed6b7bea027fb69a3c11a27c.jpg",
"is_show": 1
}
]
}