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之 ...
随机推荐
- JS base64 加密和解密
/*** * 加密 base64encode(utf16to8(str)) * 解密 utf8to16(base64decode(str)) * * */ var base64EncodeChars ...
- 使用IDEA开发及测试Spark的环境搭建及简单测试
一.安装JDK(具体安装省略) 二.安装Scala(具体安装省略) 三.安装IDEA 1.打开后会看到如下,然后点击OK
- MyBatis 源码分析——介绍
笔者第一次接触跟MyBatis框架是在2009年未的时候.不过那个时候的他并不叫MyBatis,而是叫IBatis.2010年的时候改为现在的名字--MyBatis.这几年过去了,对于笔者来讲有一点陌 ...
- HTML css 格式布局
CSS(cascading style sheets,层叠样式表),作用是美化HTML网页. /*注释*/ 注释语法 2.1 样式表的基本概念 2.1.1样式表的分类 1.内联样式表 和HTML联 ...
- 毕向东tcp学习笔记1
项目功能: 实现一次发送和接收,服务器接收客户端发送的内容并打印出来 用最通俗的语言讲解下,上图中大椭圆是服务器,A.C是客户端,当客户端和服务器通过socket建立连接后 1.两者之间形成一个通道, ...
- 在Express的页面模板中的变量的定义与使用总结
前言 最近在使用Express框架中的ejs页面模板趟了些许坑,仅以本文记录总结. 本文简述的均为ejs页面模板. 创建ejs变量的各种方法 1. 在Nodejs定义的ejs变量 ejs由是在node ...
- js加密
在项目中,经常需要使用加密来保障数据的安全性,虽然可以通过在后台加密再传给前台,但这样无疑会增加后台的服务器的压力.所以在js中使用加密算法也就应运而生了. 一.base64加密 需要引入base64 ...
- 缓冲流自动把getchar()填充
#include"stdio.h" #include"conio.h" #include<stdlib.h> int main() { char c ...
- 继续学习ant
今天由于打电话,打了两个小时的电话,结果一下子错过了学习的时间段,表示很惭愧,不过查了一些资料,感觉还不错,明天继续学习吧! ant入门到精通Ant 的最完整build.xml解释ant实用实例Ant ...
- 【openstack N版】——走进云计算
一.云计算 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问,进入可配置的计算资源共享池(资源包括:网络.服务器.存储.应用软件.服务),这些资源能够被快速提供,只需投入很少 ...