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商城系统
回复 (0)
微信扫码 立即评论