php 无限级分类 获取顶级分类ID
有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID。
现在有个分类ID,程序要找到它上级的上级的上级……分类的ID,简单说就是找出顶级分类的ID。
比如“新鲜水果”的ID是13,对应父类ID是5,而5的父ID是1,1没有父类,也就是顶级分类了。
以前年轻气盛不懂事,总想着用递归来查找,然后再将结果缓存来解决性能问题。
后来又试过将整个表缓存起来,再递归查找。
再后来……似乎比较少有机会遇到无限级分类……
最近有个同事问我怎么“优雅”的解决这个问题。
于是我灵机一动,就有了如下解决方案:
<?php $sql = "select id, pid from tablename "; // 查询后 将结果处理成 如下数组格式 $arr = [ // id => pid 1 => 0, // 省略... 5 => 1, // 省略... 13 => 5 ]; // 建议将这数组缓存起来 $id = 13; while($arr[$id]) { $id = $arr[$id]; } echo $id; // 1
不得不说:真是太优雅了!连我都佩服我自己了,同事更是五体投地,痛哭流涕。
因为他写了几十行循环再判断再递归的代码,被我用两行代码替换了……
相关推荐
-
php发送短信验证码完成注册功能
短信验证码注册,很简单,用的是 云通讯的短信系统(收费的,不过有测试的api给我们做测试).好了,不多说,进入正题. 1.收到到云通讯短信系统注册账号,然后下载他们的封装好的短信api接口代码,解压,然后找到CCPRestSDK.php文件和SendTemplateSMS.php文件,将其拉到根目录文件夹里. 2.打开SendTemplateSMS.php文件,首先注意include_once('./CCPRestSDK.php'),千万别包含错路径了,将云通讯给的测试主账号,主账号Token
-
php实现文章置顶功能的方法
本文实例讲述了php实现文章置顶功能的方法.分享给大家供大家参考,具体如下: 昨天客户让做文章置顶的功能.自己以前没做过.靠着同事的指点才做了出来.本来挺简单的事情,被自己搞了好久.自己真的缺乏对程序的理解.还是写篇博客记录一下吧. 第一步,在文章表里面建两个字段,用于做置顶功能.一个是top字段,timestamp类型,默认选"定义",用于存储置顶操作的时间;还有一个flag字段,int类型,用于判断是否置顶,置顶为1,否则为0.. 第二步,模板页面修改.列表选项里面加置顶列,下面对
-
ThinkPHP登录功能的实现方法
登陆功能是PHP程序设计中常见的功能.本文ThinkPHP实例主要完成注册成功后进入首页,并告诉你是登录用户的功能.具体实现步骤如下: 第一步:在config.php文件中加上: 'USER_AUTH_KEY'=>'authId' 示例如下: <?php if(!defined('THINK_PATH')) exit(); return array( // 定义数据库连接信息 'DB_TYPE'=> 'mysql',// 指定数据库是mysql 'DB_HOST'=> 'local
-
判断、添加和删除WordPress置顶文章的相关PHP函数小结
判断置顶文章 is_sticky() 函数用来判断一篇文章是否为置顶文章. 用法 is_sticky( $post_id ); 参数 $post_id (整数)(可选)要判断的文章 ID,默认是循环中的当前文章. 默认值:0(循环中的当前文章) 返回值 (布尔)文章是否为置顶文章. 例子 if( is_sticky() ) echo //'当前文章是置顶文章'; if( is_sticky( 68 ) ) echo //'ID 为 68 的文章是置顶文章'; 其它 此函数位于:wp-includ
-
php流量统计功能的实现代码
流量统计功能 显示效果: 总访问量:399 今日流量:14 昨日流量:16 本代码仅供学习交流,其中必有不妥之处.请见谅! -- -- 表的结构 `mycounter` -- 复制代码 代码如下: CREATE TABLE `mycounter` ( `id` int(11) NOT NULL auto_increment, `Counter` int(11) NOT NULL, `CounterLastDay` int(10) default NULL, `CounterToday` int(
-
php简单的留言板与回复功能具体实现
在网上找了这方面的教程 但是基本就是没有人说什么 然后在某一天看见一个PHP程序设计出了一张类似这样的数据库设计图之后就有了很多领悟!下面是数据库的结构图 下面我们就来继续一下介绍 id 这个算是父Id 可以通过这个id来查询 在这个id下是否有子id 同时也可以记录这个是那条留言的id son_id 这个是子id 然后通过这个id 可以找到相对应的父id news_id
-
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
在编写PHP文件过程中,发现在浏览器预览PHP文件时,顶部会出现一行空白,影响了页面的布局. 关于BOM header的解释如下: 通常情况下,使用Windows系统自带的记事本程序编写网页程序,但在编写或修改php博客系统代码后,进行调试时总是会出现如同以下几点问题: –不能登入或者不能登出: –页顶出现一条空白: –页顶出现错误警告: –其它不正常的情况. 分析原因: 由于使用UTF-8编码,在编写或修改代码后都保存为utf-8编码格式.虽然现在几乎所有的文本编辑软件都可以显示并编辑UTF-
-
PHP结合jQuery实现的评论顶、踩功能
当我们浏览网页时,我们想对网页内容如文章.评论中的观点持赞同或反对意见时,可以通过点击网页中的"顶"和"踩"来进行投票.而整个交互过程,开发者可以通过ajax异步来实现,从而提高用户体验. 本文结合实例,讲解使用PHP+MySql+jQuery实现的"顶"和"踩"投票功能,通过记录用户IP,判断用户的投票行为是否有效,该实例也可以扩展到投票系统中.如果您具备PHP.MySql和jQuery相关基础知识,那么请继续往下阅读. 准
-
php结合ajax实现赞、顶、踩功能实例
php应用越来越多,也越来越广泛,为了增加网站的丰富多彩,从而出现了很多新的技术.ajax是现代网站中不能缺少的一项技术,他可以异步刷新数据,而实现很多效果,比如刷新验证码,微博中的赞功能,都是运用这个. 本次赞功能的效果图: 主页文件(index.php): 复制代码 代码如下: <script type="text/javascript" src="http://www.jb51.net/js/jquery.min.js"></script&g
-
php 无限级分类 获取顶级分类ID
有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID. 现在有个分类ID,程序要找到它上级的上级的上级--分类的ID,简单说就是找出顶级分类的ID. 比如"新鲜水果"的ID是13,对应父类ID是5,而5的父ID是1,1没有父类,也就是顶级分类了. 以前年轻气盛不懂事,总想着用递归来查找,然后再将结果缓存来解决性能问题. 后来又试过将整个表缓存起来,再递归查找. 再后来--似乎比较少有机会遇到无限级分类-- 最近有个同事问我怎么"优雅"的解决这个
-
WordPress中获取指定分类及其子分类下的文章数目
获取特定分类文章数 有时候我们想获取某个分类(category)下的文章数目,以便在博客的某个地方显示出来.下面就提供几个获取特定分类的文章数的方法,你可以根据个人喜好选择: 方法一: 将以下PHP代码放置在主题目录下的functions.php中: function wt_get_category_count($input = '') { global $wpdb; if($input == '') { $category = get_the_category(); return $categ
-
BootStrap无限级分类(无限极分类封装版)
HTML部分 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>多级联动封装</title> <link href="./css/bootstrap.css" rel="stylesheet"> <script src="./js/jque
-
php通过分类列表产生分类树数组的方法
本文实例讲述了php通过分类列表产生分类树数组的方法.分享给大家供大家参考.具体分析如下: 这里$list 为分类列表数组,键为分类 ID,值为分类节点对象,pid 为父分类 ID php代码如下: $tree = array(); foreach ($list as $id => $row) { $pid = $row->pid; if ($pid == 0) { $tree[] = &$list[$id]; } else if (isset($list[$pid])) { $par
-
python实现二分类和多分类的ROC曲线教程
基本概念 precision:预测为对的当中,原本为对的比例(越大越好,1为理想状态) recall:原本为对的当中,预测为对的比例(越大越好,1为理想状态) F-measure:F度量是对准确率和召回率做一个权衡(越大越好,1为理想状态,此时precision为1,recall为1) accuracy:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态) fp rate:原本是错的预测为对的比例(越小越好,0为理想状态) tp rate:原本是对的
-
微信小程序获取循环元素id以及wx.login登录操作
微信小程序获取循环元素id以及wx.login登录操作 通过点击方法获取循环数据元素的id例: wxml里: <view id="list" wx:for="{{txt}}" > <text id="L_name">{{item.name}}</text> <text id="L_price">¥{{item.price}}/{{item.unit}}</text>
-
一览画面点击复选框后获取多个id值的方法
在web开发中经常会遇到一览画面中每一条记录前都带一个复选框,点击后选中该条记录进行删除.修改.查看等操作. 修改和查看都是获取一条记录的id值后传递到后台进行查询获取该记录对象的各种属性值,再显示到画面上. 我说的重点是选中多条记录后进行批量删除,如何获取多条记录的id值是问题的关键.首先是在jsp页面中全选中复选框的方法. 代码如下: function checkEvent(name, allCheckId) { var allCk = document.getElementById(all
-
THINKPHP在添加数据的时候获取主键id的值方法
在使用ThinkPHP新增数据后可以很方便的获取自动增长型的主键值. $Model = D('Blog'); $data['name'] = 'test'; $data['title'] = '测试标题'; $data['content'] = '测试内容'; $result = $Model->add($data); if ($result){ $id = $result; // 获取数据库写入数据的主键 }else{ exit($Model->getError()); } 如果你的数据表主
-
destoon实现调用当前栏目分类及子分类和三级分类的方法
调用当前栏目分类及子分类和三级分类是程序设计里常用的方法,本文就来详细讲述destoon实现调用当前栏目分类及子分类和三级分类的方法.具体操作如下: 在destoon中提供了如下的调用语句: 一级分类名: {$m[catname]} 二级分类名: {$c[catname]} 三级分类名: {$b[catname]} 具体调用示例如下: 一.直接调用分类名称和链接: {loop $maincat $i $m}<dl> {php $child = get_maincat($maincat, $CA
-
WIN32程序获取父进程ID的方法
学过windows程序设计的人都知道,windows中的进程是可以有父子关系的,拥有父子关系的进程,一旦父进程结束,子进程有会随之退出.但是如果进程之间没有父子关系,我们如何让子进程在父进程退出是也同时跟着退出呢?方法有很多,本文介绍其中的一种利用父进程ID的方案,实现的原理很简单:先获取父进程的ID,然后通过ID来获取父进程Handle,通过监视父进程的Handle来决定子进程是否退出.所以,这里的关键就是如何获取父进程的ID. 为了获取父进程ID,这里需要用到一个微软未公开的API: NTS
随机推荐
- ajax验证用户名和密码的实例代码
- ASP.NET 连接ACCESS数据库的简单方法
- Flume环境部署和配置详解及案例大全
- windows服务器上的iis Gzip压缩功能启用
- node模块机制与异步处理详解
- Android利用ObjectAnimator实现ArcMenu
- PHP循环结构实例讲解
- python如何实现excel数据添加到mongodb
- 转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
- java使用common-fileupload实现文件上传
- Android左滑返回功能的实现示例代码
- JSON解析和XML解析区别对比
- 千兆网线的做法,千兆水晶头的做法
- Mysql根据时间查询日期的优化技巧
- 详解webpack引入第三方库的方式以及注意事项
- Spring Boot整合Redis的完整步骤
- Vue实现日历小插件
- laravel-admin 在列表页添加自定义按钮的例子
- 浅谈Asp.Net母版页的相关知识
- Android开发之判断有无虚拟按键(导航栏)的实例