Home  >  Article  >  Backend Development  >  求一个递归函数

求一个递归函数

WBOY
WBOYOriginal
2016-06-23 14:04:13893browse

小弟想求一个递归函数,能判断多维数组是否为。像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;
        }
    }
??????-????????????????????????????????????
求大神帮忙


回复讨论(解决方案)

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

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

照你说的,循环里加了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;
        }

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

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

这样写可能好些

$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;}

成功了~把原来函数的判断顺序改了一下就成功了
-------------------------------------------------------------------------------------
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;
        } 
    }

我可不可以给分我自己

学学怎么玩。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn