2017-07-28 164 views
-4

我创建了一个PHP函数来测试是否$var exist and is not emptyPHP递归函数,返回错误

可是,可是我有,我不能确定问题:

  • 在我的foreach,返回false被忽略,因为另一个“回归”回归第一。

LOOK:

function notEmpty($var, $r=false){ 
    if(gettype($var)=='string' OR gettype($var)=='integer'){ 
     if($r==false){ 
      if(isset($var) AND @!empty($var)){ 
       return true; 
      }else{return false;} 
     }else{ 
      if(!isset($var) AND @empty($var)){ 
       return false; 
      } 
     } 
    }elseif(gettype($var)=='array'){ 
     foreach($var as $val){ 
      if(gettype($val)=='array'){ 
       notEmpty($val, true); 
      }else{ 
       if(empty($val) OR $val==''){echo "string"; 
        return false; 
       } 
      } 
     } 
     return true; 
    }else{return null;} 
} 

我叫喜欢我的功能: - notEmpty(array($val1, $val2, $val3));

+1

'$ r'是为了在代码中表达什么?你最好应该为你的变量使用自我解释的名字。 – arkascha

+0

看看[问] – pvg

+0

你需要以某种方式对_inner_调用的返回值作出反应,以'notEmpty()'。目前你完全忽略它。 – arkascha

回答

1

我想这是多了还是少了什么,你正在寻找:

<?php 

function notEmpty($array, $recursive=false) { 
    $empty = array_filter($array, function($element) use ($recursive) { 
     if (is_array($element) && $recursive) { 
      return !notEmpty($element); 
     } else { 
      return empty($element); 
     } 
    }); 
    return 0===count($empty); 
} 

var_dump(notEmpty([1, 2, 3])); 
var_dump(notEmpty(['foo', '', 'bar'])); 
var_dump(notEmpty(['foo', null, 'bar'])); 
var_dump(notEmpty(['foo', [1,2,3], 'bar'])); 
var_dump(notEmpty(['foo', [1,null,3], 'bar'])); 
var_dump(notEmpty(['foo', [1,null,3], 'bar'], true)); 

输出那就是:

bool(true) 
bool(false) 
bool(false) 
bool(true) 
bool(true) 
bool(false)