$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; }
$items[$value['id']] = $value; }
因为有第一步才能输出数据库那样的id的格式的啊,不然是按照0开始的啊
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 } ] }