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