检查数组是否为空

gbh*_*all 231 php arrays

我有以下代码

<?php

$error = array();
$error['something'] = false;
$error['somethingelse'] = false;

if (!empty($error))
{
    echo 'Error';
}
else
{
    echo 'No errors';
}

?>
Run Code Online (Sandbox Code Playgroud)

但是,即使没有设置,empty($error)仍然会返回true.

什么不对?

ios*_*seb 411

数组中有两个元素,这绝不意味着数组是空的.作为快速解决方法,您可以执行以下操作:

$errors = array_filter($errors);

if (!empty($errors)) {
}
Run Code Online (Sandbox Code Playgroud)

array_filter()功能的默认行为将删除阵列等于所有值null,0,''false.

否则,在您的特定情况下,如果至少有一个元素,即使具有"空"值,empty()构造也将始终返回true.

  • 这可以减少到`if(array_filter($ errors)){}` (59认同)
  • array_filter($ input)也从$ input中删除空数组. (2认同)
  • 我认为array_keys($ errors,true)与此过滤器的作用相同.(大多数人不使用第二个参数,但您可以使用它进行搜索.) (2认同)

bre*_*njt 69

你也可以通过这样做来检查它.

if(count($array) > 0)
{
    echo 'Error';
}
else
{
    echo 'No Error';
}
Run Code Online (Sandbox Code Playgroud)

  • 您不需要计算元素或使用empty().像php -r'echo array()这样的单线程?"T": "F";" 将显示空数组或非空数组的真实性. (5认同)

0xd*_*0xd 15

sizeof如果0没有元素,请尝试检查它的大小.

  • `sizeof`是`count`的别名. (18认同)
  • 提醒:`sizeof`在弃用列表中,请参阅https://wiki.php.net/rfc/deprecations_php_7_1 (9认同)

wrr*_*ren 15

PHP的内置empty()函数检查变量是否为空,null,false或表示为零.它不会因为与数组条目关联的值为false而返回true,在这种情况下,数组中包含实际元素,并且这些都是已计算的值.

如果要检查关联数组中是否将特定错误条件设置为true,则可以使用array_keys()函数筛选其值设置为true的键.

$set_errors = array_keys( $errors, true );
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用empty()函数检查此数组是否为空,同时告诉您是否存在错误以及发生了哪些错误.


小智 6

具有零元素的数组转换为false

http://php.net/manual/en/language.types.boolean.php

  • 虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接.如果链接的页面发生更改,则仅链接的答案可能会无效. (6认同)

Pek*_*ica 5

然而,即使没有设置,empty($error) 仍然返回 true。

事情不是这样的empty()。根据手册,它只会在数组上返回 true 。别的什么都没有意义。