检查所有数组项是否为空PHP

Mat*_*att 72 php arrays validation

我正在从表单添加一个项目数组,如果所有项目都是空的,我想执行一些验证并添加到错误字符串.所以我有:

$array = array(
    'RequestID'       => $_POST["RequestID"],
    'ClientName'      => $_POST["ClientName"],
    'Username'        => $_POST["Username"],
    'RequestAssignee' => $_POST["RequestAssignee"],
    'Status'          => $_POST["Status"],
    'Priority'        => $_POST["Priority"]
);
Run Code Online (Sandbox Code Playgroud)

然后,如果所有数组元素都为空,则执行:

$error_str .= '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
Run Code Online (Sandbox Code Playgroud)

xzy*_*fer 155

您可以使用内置的array_filter

如果没有提供回调,则将删除所有输入等于FALSE的条目(请参阅转换为布尔值).

所以可以在一个简单的行中做到这一点.

if(!array_filter($array)) {
    echo '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
}
Run Code Online (Sandbox Code Playgroud)

  • @xzyfer,我做了一些测试 - 使用`array_filter()`来检查是否有任何值被填充至少*几倍*比基本的`foreach`循环慢一些布尔变量用于存储结果和'break`在第一个无效值.即使`array_filter()`是一个"本机PHP函数",它也不能比`foreach'更快,因为它必须创建新的数组变量. (2认同)
  • 我赞成,我仍然有点惊讶这实际上被接受了,因为它没有满足要求,是吗?如果你说,`requestID=0` 和 `status=0` 这将导致“请输入一个值”,当有明确的值时。 (2认同)

Cap*_*ule 17

使用空胶水内爆数组并检查结果字符串的大小:

<?php if (strlen(implode($array)) == 0) echo 'all values of $array are empty'; ?>
Run Code Online (Sandbox Code Playgroud)

  • @xzyfer,如果`$str` 是`(string)'0'`,那么`strlen($str) == 0` 计算结果为`false`,而`!$str` 计算结果为`true`,因此`strlen ($str) == 0` 不能替换为 `!$str`。 (2认同)
  • @kasimir`array_filter`的回调函数是可选的,手册清楚地说明_如果没有提供回调,输入的所有条目等于FALSE(参见转换为boolean)将被删除.所以,使用`array_filter`并不是更正确比这个,它只是一种不同的方法;-) (2认同)

mul*_*uin 7

一个较老的问题,但我认为我会在我的解决方案中弹出,因为它没有在上面列出.

function isArrayEmpty($array) {
    foreach($array as $key => $val) {
        if ($val !== '')
            return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)