小弟想求一个递归函数,能判断多维数组是否为。像array(array(),array(array(),array()))这样的判定为空,但只要有一个数组里含有非空值元素,就判定不为空,例如:array(array(),array(array('a'),array()));————————————————————————————————
我自己用CI写的一个函数,但是没办法准确判定;
function is_empty($mixed){
        if(is_array($mixed) && !empty($mixed)){
            foreach($mixed as $v){
                $this->is_empty($v);
            }
        }
        if($mixed === '0' || $mixed === 0 || $mixed === 'false'  || $mixed === false || $mixed === 'null'){
            return -1;
        }
        elseif(!empty($mixed)){
            return -1;
        }
        else{      
            return 1;
        }
    }
——————-————————————————————————————————————
求大神帮忙
PHP函数递归

解决方案 »

  1. function is_empty($mixed){
            if(is_array($mixed) && !empty($mixed)){
                foreach($mixed as $v){
                    if($this->is_empty($v) == ??) return 1;
                }
     .....红色的一定要!
    但是我被你搞混昏了

     if($mixed === '0' || $mixed === 0 || $mixed === 'false'  || $mixed === false || $mixed === 'null'){
                return -1;
            }
    可知为空时返回 -1

            elseif(!empty($mixed)){
                return -1;
            }
    又是不为空时返回 -1
      

  2. if($mixed === '0' || $mixed === 0 || $mixed === 'false'  || $mixed === false || $mixed === 'null'){
                return -1;
            }

    这段的意思是不排除变量的值可能是字符串‘0’,‘false’,‘null'或者整型0,所以才用了全等于,其他非空项返回-1,空则返回1;
      

  3. 照你说的,循环里加了IF语句,但还是不行
    ————————————————————————————————————
    if(is_array($mixed) && !empty($mixed)){
                foreach($mixed as $v){
                    if($this->is_empty($v) == -1){
                        return -1;
                    }
                }
            }
            if($mixed === '0' || $mixed === 0 || $mixed === 'false' || $mixed === 'null'){
                return -1;
            }
            elseif(!empty($mixed)){
                return -1;
            }
            else{      
                return 1;
            }
      

  4. 那就是改
    if($this->is_empty($v) == ??) return 1;

    if($this->is_empty($v) == 1) return 1;
      

  5. 这样写可能好些$a = array(array(),array(array(1),array()));
    $b = array(array(),array(array(),array()));echo no_empty($a);
    echo no_empty($b);//检查是否不为空
    function no_empty($ar) {
      if(! is_array($ar)) return 1;
      $res = 0;
      foreach($ar as $v) {
        if(is_array($v)) $res |= no_empty($v);
        else $res = 1;
      }
      return $res;
    }
      

  6. 成功了~把原来函数的判断顺序改了一下就成功了
    -------------------------------------------------------------------------------------
    function no_empty($ar) {
            //排除字符串'0','false','null'和INT 0 、布尔false;
            if($ar === '0' || $ar === 0 || $ar === 'false' || $ar === false || $ar === 'null'){
                return 1;
            }
            //如果不是数组且不是上面的值,直接判定是否为空
            elseif(! is_array($ar)){
                if(!empty($ar)){
                    return 1;
                }
                return -1;
            }
            //递归 
            else{
                //初始化$res
                $res = -1;
                foreach($ar as $v) {
                    //只要有多维数组里有一个非空元素值,就记录下来
                    if($this->no_empty($v) === 1){
                        $res = 1;
                    }
                }
                return $res;
            } 
        }