我正在使用注册表单,我正在使用PHP,在我的处理部分我运行一些代码,如果提交的项目失败,我会将其添加到errors数组中。
以下是代码片段,我需要找到最佳方法来确定是否应该触发错误。
因此,如果错误数组中设置了值,那么我需要重定向并执行其他操作。
我在考虑使用isset
或is_array
,但我不认为这是答案,因为我使用**$signup_errors = array()**
设置数组不会使{{1}是真的吗?
有人能建议一个好方法吗?
is_array
答案 0 :(得分:27)
if ($signup_errors) {
// there was an error
} else {
// there wasn't
}
它是如何工作的?转换为boolean时,空数组将转换为false。每个其他数组都转换为true。来自PHP manual:
转换为布尔值
将值显式转换为 boolean,使用(bool)或(boolean) 管型。但是,在大多数情况下,施法者 是不必要的,因为价值会是 如果是自动转换 操作员,功能或控制 结构需要一个布尔参数。
另见Type Juggling。
转换为布尔值时, 以下值被视为FALSE:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串,字符串“0”
- 包含零元素的数组
- 一个零成员变量的对象(仅限PHP 4)
- 特殊类型NULL(包括未设置的变量)
- 从空标签创建的SimpleXML对象
- 其他每个值都被视为TRUE(包括任何资源)。
你也可以使用empty()
,因为它有类似的语义。
答案 1 :(得分:6)
也许是empty()?
来自文档:
返回值
如果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)
答案 2 :(得分:2)
检查是否......
if(count($array) > 0) { ... }
...如果是,则至少设置一个键值对。
或者,检查数组是否为空():
if(!empty($array)) { ... }
答案 3 :(得分:0)
您可以检查数组的最小值和最大值,在这种情况下,您可以使用键和空值填充大数组,而不必遍历每个键值对
if(!min($array) && !max($array)) { ... }
答案 4 :(得分:0)
语言构造 isset(),用于测试是否设置变量和数组元素而不是NULL。使用 is_array()会告诉您提供给它的参数是否为数组。因此,我不认为使用isset()或is_array()会为您提供正在寻找的正确的和所需的结果。
代码:
$signup_errors = array();
意味着......
is_array($signup_errors);
会返回true。但是,这并不意味着PHP的布尔语言规则会评估....
if($signup_errors)
{
//*Do something if $signup_errors evaluates to true*;
}
as true ,除非添加了一些元素。当你这样做时,
$signup_errors['captcha'] = 'Please Enter the Correct Security Code';
您已满足上述数组的PHP语言要求,以评估 true 。 现在,如果由于某种原因你想要或者需要在将来对数组元素使用isset(),你可以。但是,上面的条件语句对于你来说足够了。
答案 5 :(得分:0)
如果您已经拥有密钥,则使用array_filter,但想要检查非布尔值的值。
<?php
$errors = ['foo' => '', 'bar' => null];
var_dump(array_filter($errors));
$errors = ['foo' => 'Oops', 'bar' => null];
var_dump(array_filter($errors));
输出:
array (size=0)
empty
array (size=1)
'foo' => string 'Oops' (length=4)
使用:
<?php
if(array_filter($errors)) {
// Has errors
}
答案 6 :(得分:0)
我应该在这里添加一个明显的答案。如果将错误数组初始化为空数组。然后稍后要检查它是否不再是空数组:
<?php
$errors = [];
if($errors !== [])
{
// We have errors.
}