检查数组是不是为空[重复]

Posted

技术标签:

【中文标题】检查数组是不是为空[重复]【英文标题】:Check whether an array is empty [duplicate]检查数组是否为空[重复] 【发布时间】:2012-01-09 20:50:21 【问题描述】:

我有以下代码

<?php

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

if (!empty($error))

    echo 'Error';

else

    echo 'No errors';


?>

但是,empty($error) 仍然返回 true,即使没有设置任何内容。

哪里不对?

【问题讨论】:

在 Windows 上的 PHP 5.3 中为我正常工作 - 我得到 Error ***.com/questions/4139301/…检查答案没有2 这段代码的输出是“错误”还是“无错误”? 你想达到什么目的?当我运行这段代码时,我得到了错误,这是正确的,因为数组有键,因此不是空的。你想让 false 以某种方式等同于“不存在”吗? 我也遇到了错误。我想要这样,如果 $error['something'] = true,那么只有 $error 会返回 true。 【参考方案1】:

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

$errors = array_filter($errors);

if (!empty($errors)) 

array_filter() 函数的默认行为将删除数组中等于null0''false 的所有值。

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

【讨论】:

array_filter($input) 也会从 $input 中删除空数组。 这可以缩减为if (array_filter($errors)) 我认为 array_keys($errors, true) 会和这个过滤器一样。 (大多数人不使用第二个参数,但您可以使用它进行搜索。) 或 array_sum(array_values($errors)) 只会告诉你有多少错误。【参考方案2】:

你也可以通过做来检查。

if(count($array) > 0)

    echo 'Error';

else

    echo 'No Error';

【讨论】:

你不需要计算元素或使用empty()。像 php -r 'echo array() 这样的单线? "T":"F";'将显示空或非空数组的真实性。 empty() 处理 FALSE 和 isset(),因此您可能需要 empty()。【参考方案3】:

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

【讨论】:

sizeofcount 的别名。 提醒:sizeof 已在弃用列表中,请参阅wiki.php.net/rfc/deprecations_php_7_1 在这种情况下,count(或 sizeof)将返回 2,因为这两个值设置为 false。【参考方案4】:

PHP 的内置empty() 函数检查变量是否为空、null、false 或零表示。它不会仅仅因为与数组条目关联的值为 false 而返回 true,在这种情况下,数组中包含实际元素,这就是评估的全部内容。

如果您想检查关联数组中的特定错误条件是否设置为 true,您可以使用 array_keys() 函数过滤其值设置为 true 的键.

$set_errors = array_keys( $errors, true );

然后你可以使用empty()函数来检查这个数组是否为空,同时告诉你是否有错误以及发生了哪些错误。

【讨论】:

【参考方案5】:

零元素数组转换为假

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

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。【参考方案6】:

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

empty() 不是这样工作的。根据manual,它只会在 empty 数组上返回 true。其他任何事情都没有意义。

【讨论】:

【参考方案7】:

来自 PHP 文档:

如果 var 具有非空且非零值,则返回 FALSE。

以下内容被认为是空的:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

【讨论】:

来源php.net/manual/de/function.empty.php【参考方案8】:

函数empty() 不适用于测试空数组! 示例:

$a=array("","");
if(empty($a)) echo "empty";
else echo "not empty"; //this case is true

需要一个函数:

function is_array_empty($a)
foreach($a as $elm)
if(!empty($elm)) return false;
return true;

好的,这是一个非常古老的问题 :),但我发现这个线程正在寻找解决方案,但我没有找到一个好的解决方案。

再见 (对不起我的英语)

【讨论】:

这是数组空检查的最佳方式。或者你可以使用 $set_errors = array_keys( $errors, true );【参考方案9】:

hi 数组是一个对象,所以它是 null 类型或空白

   <?php
        if($error!=null)
            echo "array is blank or null or not array";
    //OR
       if(!empty($error))
           echo "array is blank or null or not array";
    //OR
     if(is_array($error))
           echo "array is blank or null or not array";
   ?>

【讨论】:

【参考方案10】:

我无法复制它(php 5.3.6):

php > $error = array();
php > $error['something'] = false;
php > $error['somethingelse'] = false;
php > var_dump(empty($error));
bool(false)

php > $error = array();
php > var_dump(empty($error));
bool(true)
php >

您究竟在哪里执行返回 true 的 empty() 调用?

【讨论】:

【参考方案11】:
<?php
if(empty($myarray))
echo"true";
else
echo "false";
?>

【讨论】:

【参考方案12】:

在 PHP 中,即使数组中的单个项目或对象的属性为空,使用 empty($subject) 函数时数组或对象也不会计算为空。换句话说,将一堆单独测试为“空”的数据拼凑在一起会创建一个非空的组合。 使用以下 PHP 函数来确定数组中的项或对象的属性是否为空:

function functionallyEmpty($o)

  if (empty($o)) return true;
  else if (is_numeric($o)) return false;
  else if (is_string($o)) return !strlen(trim($o)); 
  else if (is_object($o)) return functionallyEmpty((array)$o);

  // If it's an array!
  foreach($o as $element) 
    if (functionallyEmpty($element)) continue; 
    else return false; 

  // all good.
  return true;

示例用法:

$subject = array('', '', '');

empty($subject); // returns false
functionallyEmpty($subject); // returns true

class $Subject 
    a => '',
    b => array()


$theSubject = new Subject();

empty($theSubject); // returns false
functionallyEmpty($theSubject); // returns true

【讨论】:

这不适用于至少包含 bool(true) 值的输入。最好这样写:pastebin.com/DnFtDWgH

以上是关于检查数组是不是为空[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:检查对象是不是没有属性或映射/关联数组是不是为空[重复]

检查可为空的布尔值是不是为空[重复]

检查结构是不是为空[重复]

React检查Const是不是为空[重复]

检查 JSON 响应数据是不是为空 [重复]

使用jQuery检查值是不是为空[重复]