首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >tp6无限极分类地址值查询(提供sql每一步都var_dump();了

tp6无限极分类地址值查询(提供sql每一步都var_dump();了

作者头像
贵哥的编程之路
发布2022-05-25 10:42:47
发布2022-05-25 10:42:47
4120
举报
代码语言:javascript
复制
 $cats = Db::name('cat')->select()->toArray();

这样的数据。

代码语言:javascript
复制
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)
  }
}
代码语言:javascript
复制
-- 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 第二步:为什么需要引用传递,而不用值传递。因为如果你想变化原来的值的话,就用引用传递吧。值传递不能的哦

代码语言:javascript
复制
public function getIndexGoods(){
		 $cats = Db::name('cat')->select()->toArray();
        //$cats = tree($cats);
    $catss=generateTree($cats);    //
    return json(['code'=>"200",'message'=>"成功","data"=>$catss]);
	}
代码语言:javascript
复制
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;
}
代码语言:javascript
复制
<?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');

解析代码:

代码语言:javascript
复制
$items = array();
    foreach($array as $value){
        $items[$value['id']] = $value;
    }
代码语言:javascript
复制
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)
  }
}

然后遍历成树形结构:

代码语言:javascript
复制
{
  "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
        }
      ]
    }
  ]
}

如果不用引用传递的后果:(只找到了顶级分类.为什么呢?因为不能修改原来值的结构啊。引用能的啊)

代码语言:javascript
复制
{
  "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
    }
  ]
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档