PHP递归函数,返回错误

时间:2017-07-28 09:54:16

标签: php arrays return

我创建了一个PHP函数来测试$var exist and is not empty

但是,我有一个我无法识别的问题:

  • 在我的foreach中,return false被忽略,因为另一个'return'首先返回。

看:

    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 个答案:

答案 0 :(得分:2)

我想这或多或少是你想要的:

<?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)