聚散流沙

聚散流沙

这家伙有点懒,还没写个性签名!

  • 财富值35
  • 威望值0
  • 总积分55

个人信息

  • 2016-06-14 已签到
    连续签到1天,获得了5个金钱
  • 赞了评论
    
    <?php
    /**
     * 数据处理类
     */
    final class Data
    {
        /**
         * 本函数即将废弃
         * @param $data
         * @param string $fieldPri
         * @param string $fieldPid
         * @param int $pid
         * @param null $sid
         * @param int $type 1 获得多层栏目  | 2 获得所有子栏目 3 获得父级栏目 4 判断是否为子栏目
         * @param string $html
         * @param int $level
         * @return array|bool
         */
        static public function channel($data, $fieldPri = 'cid', $fieldPid = 'pid', $pid = 0, $sid = null, $type = 2, $html = "&nbsp;", $level = 1)
        {
            switch ($type) {
                case 1:
                    return self::channelLevel($data, $pid, $html, $fieldPri, $fieldPid, $level);
                case 2:
                    return self::channelList($data, $pid, $html, $fieldPri, $fieldPid, $level);
                case 3:
                    return self::parentChannel($data, $sid, $html, $fieldPri, $fieldPid, $level);
                case 4:
                    return self::isChild($data, $sid, $pid, $fieldPri, $fieldPid);
            }
        }
    
        /**
         * 获得所有子栏目
         * @param $data 栏目数据
         * @param int $pid 操作的栏目
         * @param string $html 栏目名前字符
         * @param string $fieldPri 表主键
         * @param string $fieldPid 父id
         * @param int $level 等级
         * @return array
         */
        static public function channelList($data, $pid = 0, $html = "&nbsp;", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
        {
            if (!$data) {
                return array();
            }
            $arr = array();
            $id = 0;
            foreach ($data as $v) {
                if ($v[$fieldPid] == $pid) {
                    $arr[$id] = $v;
                    $arr[$id]['level'] = $level;
                    $arr[$id]['html'] = str_repeat($html, $level - 1);
                    $sArr = self::channelList($data, $v[$fieldPri], $html, $fieldPri, $fieldPid, $level + 1);
                    $arr = array_merge($arr, $sArr);
                    $id = count($arr);
                }
            }
            return $arr;
        }
    
        /**
         * 返回多层栏目
         * @param $data 操作的数组
         * @param int $pid 一级PID的值
         * @param string $html 栏目名称前缀
         * @param string $fieldPri 唯一键名,如果是表则是表的主键
         * @param string $fieldPid 父ID键名
         * @param int $level 不需要传参数(执行时调用)
         * @return array
         */
        static public function channelLevel($data, $pid = 0, $html = "&nbsp;", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
        {
            if (!$data) {
                return array();
            }
            $arr = array();
            foreach ($data as $v) {
                if ($v[$fieldPid] == $pid) {
                    $arr[$v[$fieldPri]] = $v;
                    $arr[$v[$fieldPri]]['html'] = str_repeat($html, $level - 1);
                    $arr[$v[$fieldPri]]["Data"] = self::channelLevel($data, $v[$fieldPri], $html, $fieldPri, $fieldPid, $level + 1);
                }
            }
            return $arr;
        }
    
        /**
         * 获得所有父级栏目
         * @param $data 栏目数据
         * @param $sid 子栏目
         * @param string $html 栏目名称前缀
         * @param string $fieldPri 唯一键名,如果是表则是表的主键
         * @param string $fieldPid 父ID键名
         * @return array
         */
        static public function parentChannel($data, $sid, $html = "&nbsp;", $fieldPri = 'cid', $fieldPid = 'pid')
        {
            if (!$data) {
                return array();
            }
            static $arr = array();
            foreach ($data as $v) {
                if ($v[$fieldPri] == $sid) {
                    $arr[] = $v;
                    $sArr = self::parentChannel($data, $v[$fieldPid], $html, $fieldPri, $fieldPid);
                    $arr = array_merge($arr, $sArr);
                }
            }
            return $arr;
        }
    
        /**
         * 判断$s_cid是否是$d_cid的子栏目
         * @param $data 栏目数据
         * @param $sid 子栏目id
         * @param $pid 父栏目id
         * @param string $fieldPri 主键
         * @param string $fieldPid 父id字段
         * @return bool
         */
        static function isChild($data, $sid, $pid, $fieldPri = 'cid', $fieldPid = 'pid')
        {
            $_data = self::channelList($data, $pid, "", $fieldPri, $fieldPid);
            foreach ($_data as $c) {
                //目标栏目为源栏目的子栏目
                if ($c['cid'] == $sid) return true;
            }
            return false;
        }
    
        /**
         * 递归实现迪卡尔乘积
         * @param $arr 操作的数组
         * @param array $tmp
         * @return array
         */
        static function descarte($arr, $tmp = array())
        {
            static $n_arr = array();
            foreach (array_shift($arr) as $v) {
                $tmp[] = $v;
                if ($arr) {
                    self::descarte($arr, $tmp);
                } else {
                    $n_arr[] = $tmp;
                }
                array_pop($tmp);
            }
            return $n_arr;
        }
    
    }
    
    ?>
    
  • 2016-06-08 已签到
    连续签到3天,获得了15个金钱
  • 2016-06-07 已签到
    连续签到2天,获得了10个金钱
  • 2016-06-06 已签到
    连续签到1天,获得了5个金钱
职场新人 等级规则
55/100
资料完整度
0/100
用户活跃度
0/100

Ta的关注

1

Ta的粉丝

1

Ta的访客

0