跳转到主内容
极星编程网:以代码为星,赴技术山海!

求一个递归函数

小弟想求一个递归函数,能判断多维数组是否为。像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; } } 我可不可以给分我自己 学学怎么玩。

相关文章