如何检查PHP数组是否设置了任何值?

如何检查PHP数组是否设置了任何值?,php,arrays,Php,Arrays,我正在处理一个注册表单,我在使用PHP,在我的处理部分我运行一些代码,如果提交的项目失败,我会将其添加到错误数组中 下面是代码的一小段,我现在需要找到最佳方法来确定是否应该触发错误 因此,如果在错误数组中设置了一个值,那么我需要重定向并执行一些其他操作 我想用isset或者is\u array但是我不认为这是答案,因为我用**$signup\u errors=array()**设置了数组,这不就是is\u array吗 有人能提出一个好的方法吗 //at the beginning I set

我正在处理一个注册表单,我在使用PHP,在我的处理部分我运行一些代码,如果提交的项目失败,我会将其添加到错误数组中

下面是代码的一小段,我现在需要找到最佳方法来确定是否应该触发错误

因此,如果在错误数组中设置了一个值,那么我需要重定向并执行一些其他操作

我想用
isset
或者
is\u array
但是我不认为这是答案,因为我用
**$signup\u errors=array()**
设置了数组,这不就是
is\u array

有人能提出一个好的方法吗

//at the beginning I set the error array
$signup_errors = array();

// I then add items to the error array as needed like this...
$signup_errors['captcha'] = 'Please Enter the Correct Security Code';
也许吧

从文档:

返回值 如果var的值为非空,则返回FALSE 和非零值

以下事项被认为是 空的:

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

if(count($array) > 0) { ... }
…如果是,则至少设置一个键值对

或者,检查数组是否为空()

它是如何工作的?转换为布尔值时,空数组将转换为false。每隔一个数组将转换为true。从:

转换为布尔值 将值显式转换为 布尔值,使用(布尔值)或(布尔值) 演员。然而,在大多数情况下,演员 是不必要的,因为将 如果 操作员、功能或控制 结构需要一个布尔参数

另请参见键入杂耍

转换为布尔值时 以下值被认为是错误的:

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象
  • 其他所有值均视为真(包括任何资源)

您也可以使用,因为它具有相似的语义。

您可以检查数组的最小值和最大值,在这种情况下,您可以使用一个包含键和空值的大型数组,而不必遍历每个键值对

if(!min($array) && !max($array)) { ... }

语言结构isset()用于测试变量和数组元素是否已设置且不为空。使用is_array()会告诉您提供给它的参数是否是数组。因此,我不认为使用isset()或is_array()会得到您所寻求的正确和期望的结果

守则:

$signup_errors = array();
意思是

is_array($signup_errors);
将返回真值。然而,这并不意味着PHP的布尔语言规则会计算

if($signup_errors)
{
     //*Do something if $signup_errors evaluates to true*;
}
为true,除非添加了某些元素。当你这么做的时候

$signup_errors['captcha'] = 'Please Enter the Correct Security Code';
您满足了PHP语言的要求,使上面的数组计算为true。
现在,如果出于某种原因希望或需要在将来对数组元素使用isset(),您可以。但是,上面的条件语句对于这种情况已经足够了

如果已经有键,但要检查非布尔值,请使用数组过滤器

<?php
$errors = ['foo' => '', 'bar' => null];
var_dump(array_filter($errors));

$errors = ['foo' => 'Oops', 'bar' => null];
var_dump(array_filter($errors));
使用:


我应该在这里添加一个明显的答案。如果将错误数组初始化为空数组。稍后要检查它是否不再是空数组:

<?php
$errors = [];

if($errors !== [])
{
    // We have errors.
}

+1我不知道为什么会有人想做比这更复杂的事情…+1。另外值得注意的是,如果无法保证变量已初始化(如$\u POST data),则应使用empty()。@ToomuchHP可能是因为如果您不熟悉Php的类型转换,它不会立即变得明显。因为,如果对不可计数的对象调用,则使用count()将引发错误。因此,如果$array为null,那么这种方法将不起作用。
<?php
$errors = ['foo' => '', 'bar' => null];
var_dump(array_filter($errors));

$errors = ['foo' => 'Oops', 'bar' => null];
var_dump(array_filter($errors));
array(0) {
}
array(1) {
  ["foo"]=>
  string(4) "Oops"
}
<?php
if(array_filter($errors)) {
    // Has errors
}
<?php
$errors = [];

if($errors !== [])
{
    // We have errors.
}