wemall app商城源码中基于PHP的通用的树型类代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改。本文分享其中关于基于PHP的通用的树型类代码,供技术员参考学习。
<?php /** +------------------------------------------------ * 通用的树型类 * 请使用的朋友注意 id, name, pid 这三个下标, id的值与数组下标必须吻合 +------------------------------------------------ * @author yangyunzhou@foxmail.com +------------------------------------------------ * @date 2010年11月23日10:09:31 +------------------------------------------------ */ class Tree { /** * +------------------------------------------------ * 生成树型结构所需要的2维数组 * +------------------------------------------------ * * @author yangyunzhou@foxmail.com * +------------------------------------------------ * @var Array */ var $arr = array (); /** * +------------------------------------------------ * 生成树型结构所需修饰符号,可以换成图片 * +------------------------------------------------ * * @author yangyunzhou@foxmail.com * +------------------------------------------------ * @var Array */ var $icon = array ( '│', '├─', '└─' ); /** * * @access private */ var $ret = ''; /** * 构造函数,初始化类 * * @param * array 2维数组,例如: * array( * 1 => array('id'=>'1','pid'=>0,'name'=>'一级栏目一'), * 2 => array('id'=>'2','pid'=>0,'name'=>'一级栏目二'), * 3 => array('id'=>'3','pid'=>1,'name'=>'二级栏目一'), * 4 => array('id'=>'4','pid'=>1,'name'=>'二级栏目二'), * 5 => array('id'=>'5','pid'=>2,'name'=>'二级栏目三'), * 6 => array('id'=>'6','pid'=>3,'name'=>'三级栏目一'), * 7 => array('id'=>'7','pid'=>3,'name'=>'三级栏目二') * ) */ function tree($arr = array()) { $this->arr = $arr; $this->ret = ''; return is_array ( $arr ); } /** * 得到父级数组 * * @param * int * @return array */ function get_parent($myid) { $newarr = array (); if (! isset ( $this->arr [$myid] )) return false; $pid = $this->arr [$myid] ['pid']; $pid = $this->arr [$pid] ['pid']; if (is_array ( $this->arr )) { foreach ( $this->arr as $id => $a ) { if ($a ['pid'] == $pid) $newarr [$id] = $a; } } return $newarr; } /** * 得到子级数组 * * @param * int * @return array */ function get_child($myid) { $a = $newarr = array (); if (is_array ( $this->arr )) { foreach ( $this->arr as $id => $a ) { if ($a ['pid'] == $myid) $newarr [$id] = $a; } } return $newarr ? $newarr : false; } /** * 得到当前位置数组 * * @param * int * @return array */ function get_pos($myid, &$newarr) { $a = array (); if (! isset ( $this->arr [$myid] )) return false; $newarr [] = $this->arr [$myid]; $pid = $this->arr [$myid] ['pid']; if (isset ( $this->arr [$pid] )) { $this->get_pos ( $pid, $newarr ); } if (is_array ( $newarr )) { krsort ( $newarr ); foreach ( $newarr as $v ) { $a [$v ['id']] = $v; } } return $a; } /** * ------------------------------------- * 得到树型结构 * ------------------------------------- * * @author yangyunzhou@foxmail.com * @param $myid 表示获得这个ID下的所有子级 * @param $str 生成树形结构基本代码, * 例如: "<option value=\$id \$select>\$spacer\$name</option>" * @param $sid 被选中的ID, * 比如在做树形下拉框的时候需要用到 * @param * $adds * @param * $str_group */ function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '') { $number = 1; $child = $this->get_child ( $myid ); if (is_array ( $child )) { $total = count ( $child ); foreach ( $child as $id => $a ) { $j = $k = ''; if ($number == $total) { $j .= $this->icon [2]; } else { $j .= $this->icon [1]; $k = $adds ? $this->icon [0] : ''; } $spacer = $adds ? $adds . $j : ''; $selected = $id == $sid ? 'selected' : ''; @extract ( $a ); $parentid == 0 && $str_group ? eval ( "\$nstr = \"$str_group\";" ) : eval ( "\$nstr = \"$str\";" ); $this->ret .= $nstr; $this->get_tree ( $id, $str, $sid, $adds . $k . ' ', $str_group ); $number ++; } } return $this->ret; } /** * 同上一方法类似,但允许多选 */ function get_tree_multi($myid, $str, $sid = 0, $adds = '') { $number = 1; $child = $this->get_child ( $myid ); if (is_array ( $child )) { $total = count ( $child ); foreach ( $child as $id => $a ) { $j = $k = ''; if ($number == $total) { $j .= $this->icon [2]; } else { $j .= $this->icon [1]; $k = $adds ? $this->icon [0] : ''; } $spacer = $adds ? $adds . $j : ''; $selected = $this->have ( $sid, $id ) ? 'selected' : ''; @extract ( $a ); eval ( "\$nstr = \"$str\";" ); $this->ret .= $nstr; $this->get_tree_multi ( $id, $str, $sid, $adds . $k . ' ' ); $number ++; } } return $this->ret; } function have($list, $item) { return (strpos ( ',,' . $list . ',', ',' . $item . ',' )); } /** * +------------------------------------------------ * 格式化数组 * +------------------------------------------------ * * @author yangyunzhou@foxmail.com * +------------------------------------------------ */ function getArray($myid = 0, $sid = 0, $adds = '') { $number = 1; $child = $this->get_child ( $myid ); if (is_array ( $child )) { $total = count ( $child ); foreach ( $child as $id => $a ) { $j = $k = ''; if ($number == $total) { $j .= $this->icon [1]; } else { $j .= $this->icon [1]; $k = $adds ? $this->icon [0] : ''; } $spacer = $adds ? $adds . $j : ''; @extract ( $a ); $a ['name'] = $spacer . ' ' . $a ['name']; $this->ret [$a ['id']] = $a; $fd = $adds . $k . ' '; $this->getArray ( $id, $sid, $fd ); $number ++; } } return $this->ret; } } ?>
原文详情地址:http://git.oschina.net/zzunet/wemall-doraemon/commit/e8f303df5663dc69fe47bb9623222149d40e3956
wemall doraemonAndroid app商城详情地址:http://www.koahub.com/home/product/55
wemall官网地址:http://www.wemallshop.com
WeMall - 开源微商城 微信商城 商城源码 分销商城 b2b2c商城系统
wemall app商城源码中基于PHP的通用的树型类代码的更多相关文章
- wemall app商城源码中基于JAVA通过Http请求获取json字符串的代码
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于通过Http请求获取json字符串的代码供 ...
- wemall app商城源码中基于JAVA的Android异步加载图片管理器代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中基于JAVA的绑定和处理fragments和viewpager之间的逻辑关系代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中基于PHP的ThinkPHP惯例配置文件代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中android按钮的三种响应事件
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码中android按 ...
- wemall app商城源码中实现带图片和checkbox的listview
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享其中实现带图片和checkbox的listvi ...
- wemall app商城源码中ScrollView中嵌套ListView主要代码
很多时间我们在scorllview中嵌入listview的时候,都只能看到listview显示一行数据,而我们的要求是显示多行,即我们数据的行数, 当ListView的高度设定一定的值时,ListVi ...
- wemall app商城源码Android之支付宝通知处理类
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处 ...
- wemall app商城源码Android之支付宝接口公用函数
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之 ...
随机推荐
- C# Linq to sql 实现 group by 统计多字段 返回多字段
Linq to sql 使用group by 统计多个字段,然后返回多个字段的值,话不多说,直接上例子: where u.fy_no == fy_no orderby u.we_no group u ...
- return_url和notify_url的区别
页面跳转同步通知页面特性(return_url特性) (1) 买家在支付成功后会看到一个支付宝提示交易成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url ...
- C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!
说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部 ...
- S2SH框架整合(注解)Struts2+Spring+Hibernate+MySql
整合简介 Struts2+Spring4+hibernate4整合,Maven管理jar包,Eclipse工具.注解方式 架构截图 1.Spring整合Hibernate 1.1.创建Hibern ...
- LPC4370使用学习:GPIO的引脚功能使用,和12864OLED模拟I2C驱动
一: 手中有块LPC4370的开发板,因为便宜,所以引脚引出的不多,而且只有基本的底板资源驱动代码和例程. 看着手册和例程看了老半天,写程序写了半天,结果GPIO老是驱动不起来,因为引脚配置寄存器中有 ...
- asp.net core mvc剖析:KestrelServer
KestrelServer是基于Libuv开发的高性能web服务器,那我们现在就来看一下它是如何工作的.在上一篇文章中提到了Program的Main方法,在这个方法里Build了一个WebHost,我 ...
- CentOS 6.4 升级python 2.6.6 到 python 2.7.9
1. 查看当前系统python的版本 python -V 2. 下载python软件包 cd /usr/local/src wget http://python.org/ftp/python/2.7. ...
- 设置npm安装模块目录<nodejs>
nodejs安装模块命令: npm install <input_name> # 本地安装 npm install <input_name> -g # 全局安装 1.npm i ...
- PHP中的 !== 与 !=
'==' 比较两边的值是否相等,会自动转换类型: '===' 则会严格比较类型是否相同,如果类型不相同,直接返回false. 例如:'123' === 123 // => false '!=' ...
- IDEA下创建Maven项目,并整合使用Spring、Spring MVC、Mybatis框架
项目创建 本项目使用的是IDEA 2016创建. 首先电脑安装Maven,接着打开IDEA新建一个project,选择Maven,选择图中所选项,下一步. 填写好GroupId和ArtifactId, ...