Php 检查数组是否为空

Php 检查数组是否为空,php,arrays,Php,Arrays,我有以下代码 <?php $error = array(); $error['something'] = false; $error['somethingelse'] = false; if (!empty($error)) { echo 'Error'; } else { echo 'No errors'; } ?> 但是,empty($error)仍然返回true,即使未设置任何内容 什么不对?数组中有两个元素,这绝对不意味着数组是空的。作为快速解决方

我有以下代码

<?php

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

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

?>

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


什么不对?

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

$errors = array_filter($errors);

if (!empty($errors)) {
}
array\u filter()
函数的默认行为将从数组中删除所有等于
null
0
'
false
的值


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

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

来自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)
然而,empty($error)仍然返回true,即使未设置任何内容


empty()
不是这样工作的。根据,它将仅在空数组上返回true。其他任何东西都没有意义。

您也可以通过执行以下操作来检查它

if(count($array) > 0)
{
    echo 'Error';
}
else
{
    echo 'No Error';
}
我不能复制它(PHP5.3.6):

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


<?php
if(empty($myarray))
echo"true";
else
echo "false";
?>
PHP的内置函数检查变量是否为空、null、false或表示为零。它不会因为与数组项关联的值为false而返回true,在本例中,数组中包含实际元素,这就是计算的全部内容

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

$set_errors = array_keys( $errors, true );
然后可以使用empty()函数检查此数组是否为空,同时告诉您是否存在错误以及发生了哪些错误。

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

功能是必需的:

function is_array_empty($a){
foreach($a as $elm)
if(!empty($elm)) return false;
return true;
}
好的,这是一个非常古老的问题:),但我发现这个线程在搜索解决方案,但我没有找到一个好的

再见
(对不起我的英语)

hi array是一个对象,因此它的类型为空或为空

   <?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";
   ?>

在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

包含零元素的数组将转换为false


在Windows上的PHP5.3中对我正确工作-我得到
错误
检查答案2这段代码的输出是“错误”还是“无错误”?你想实现什么?当我运行这段代码时,我得到的错误是正确的,因为数组有键,因此不是空的。你想让false以某种方式等同于“不存在”吗?我也有错误。我希望这样,如果$error['something']=true,那么只有$error才会返回true。array\u filter($input)也会从$input中删除空数组。如果(array\u filter($errors)){}array\u keys($errors,true)与此筛选器做的相同,我认为这可以被缩减为
。(大多数人不使用第二个参数,但您可以使用它进行搜索。)或者array_sum(array_values($errors))只会告诉您有多少错误。您不需要计算元素或使用empty()。像php-r'echo array()这样的一行程序?“T”:“F”将显示空数组或非空数组的真实性。empty()处理FALSE和isset(),因此您可能需要empty()。
sizeof
count
的别名。提醒:
sizeof
在弃用列表中,请参阅在本例中,count(或sizeof)将返回两个,由于这两个值设置为false。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。这是数组空检查的最佳方法。或者您可以使用$set\u errors=array\u keys($errors,true);Source至少对包含布尔(真)值的输入不起作用。最好这样写:
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