Heim > Backend-Entwicklung > PHP-Tutorial > 求一个递归函数

求一个递归函数

WBOY
Freigeben: 2016-06-23 14:04:13
Original
914 Leute haben es durchsucht

小弟想求一个递归函数,能判断多维数组是否为。像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;}
Nach dem Login kopieren

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

我可不可以给分我自己

学学怎么玩。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage