【问题标题】:PHP Recursive Function, return errorPHP递归函数,返回错误
【发布时间】:2018-01-04 08:06:07
【问题描述】:

我创建了一个 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));

【问题讨论】:

  • $r 在该代码中的含义是什么?您最好为变量使用自我解释的名称。
  • 看看How to Ask
  • 您需要对notEmpty()inner 调用的返回值做出反应。目前你完全忽略它。
  • 你的 if(empty($val) OR $val=='') 条件是多余的
  • @alpadev 这里的大部分内容都是多余的

标签: php arrays return


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-21
    • 2021-06-18
    • 1970-01-01
    • 2012-03-11
    • 2015-04-27
    • 2019-07-02
    • 2011-05-23
    • 2021-03-02
    相关资源
    最近更新 更多