• php必备树状数组处理方法


    thinkphp必备公共方法

    /**
     * 子元素计数器
     * @param array $array
     * @param int   $pid
     * @return array
     */
    function array_children_count($array, $pid)
    {
        $counter = [];
        foreach ($array as $item) {
            $count = isset($counter[$item[$pid]]) ? $counter[$item[$pid]] : 0;
            $count++;
            $counter[$item[$pid]] = $count;
        }
        return $counter;
    }
    /**
     * 数组层级缩进转换
     * @param array $array 源数组
     * @param int   $pid
     * @param int   $level
     * @return array
     */
    function array2level($array, $pid = 0, $level = 1)
    {
        static $list = [];
        foreach ($array as $v) {
            if ($v['pid'] == $pid) {
                $v['level'] = $level;
                $list[]     = $v;
                array2level($array, $v['id'], $level + 1);
            }
        }
        return $list;
    }
    
    /**
     * 构建层级(树状)数组
     * @param array  $array          要进行处理的一维数组,经过该函数处理后,该数组自动转为树状数组
     * @param string $pid_name       父级ID的字段名
     * @param string $child_key_name 子元素键名
     * @return array|bool
     */
    function array2tree(&$array, $pid_name = 'pid', $child_key_name = 'children')
    {
        $counter = array_children_count($array, $pid_name);
        if (!isset($counter[0]) || $counter[0] == 0) {
            return $array;
        }
        $tree = [];
        while (isset($counter[0]) && $counter[0] > 0){
            $temp = array_shift($array);
            if (isset($counter[$temp['id']]) && $counter[$temp['id']] > 0) {
                array_push($array, $temp);
            } else {
                if ($temp[$pid_name] == 0) {
                    $tree[] = $temp;
                } else {
                    $array = array_child_append($array, $temp[$pid_name], $temp, $child_key_name);
                }
            }
            $counter = array_children_count($array, $pid_name);
        }
        return $tree;
    }
    /**
     * 把元素插入到对应的父元素$child_key_name字段
     * @param        $parent
     * @param        $pid
     * @param        $child
     * @param string $child_key_name 子元素键名
     * @return mixed
     */
    function array_child_append($parent, $pid, $child, $child_key_name)
    {
        foreach ($parent as &$item) {
            if ($item['id'] == $pid) {
                if (!isset($item[$child_key_name]))
                    $item[$child_key_name] = [];
                $item[$child_key_name][] = $child;
            }
        }
        return $parent;
    }
    /**
     * 手机号格式检查
     * @param string $mobile
     * @return bool
     */
    function check_mobile_number($mobile)
    {
        if (!is_numeric($mobile)) {
            return false;
        }
        $reg = '#^13[d]{9}$|^14[5,7]{1}d{8}$|^15[^4]{1}d{8}$|^17[0,6,7,8]{1}d{8}$|^18[d]{9}$#';
    
        return preg_match($reg, $mobile) ? true : false;
    }
    //获取客户端真实IP
    function getClientIP()  
    {  
        global $ip;  
        if (getenv("HTTP_CLIENT_IP"))  
            $ip = getenv("HTTP_CLIENT_IP");  
        else if(getenv("HTTP_X_FORWARDED_FOR"))  
            $ip = getenv("HTTP_X_FORWARDED_FOR");  
        else if(getenv("REMOTE_ADDR"))  
            $ip = getenv("REMOTE_ADDR");  
        else $ip = "Unknow";  
        return $ip;  
    }  

      

  • 相关阅读:
    解決 centos -bash: vim: command not found
    linux环境下安装tomcat6
    由于防火墙限制无法访问linux服务器上的tomcat应用
    linux环境下安装jdk1.6
    JSP输出HTML时产生的大量空格和换行的去除方法
    git使用
    Python+selenium+eclipse+pydev自动化测试环境搭建
    jmeter 打不开 提示“Not able to find Java executable or version”的解决办法
    appium如何解决每次都要安装apk的烦恼
    appium 中手势密码的定位坐标
  • 原文地址:https://www.cnblogs.com/wenhainan/p/7526395.html
Copyright © 2020-2023  润新知