[英]Problem with encoding and parsing a php array
我有一个 php 文件,可以为我验证一个简单的表单条目。 我将每个错误(在验证过程中发现的错误分配给一个变量($name_errors、$phone_errors 和 $email_errors)。这些变量中的每一个都包含一个字符串('请输入一个有效的名称'、'请输入一个有效的电话号码'和'请输入一个有效的电子邮件地址')。然后我创建了一个包含这些变量的数组,称为 $errors。因此该数组将如下所示
$errors = array($name_errors, $phone_errors, $email_errors);
一旦我有了 $errors 数组,我就会通过 if 语句运行,如下面的代码所示。 本质上,如果发现错误,该语句应该对 $errors 数组进行 JSON_Encode 并退出脚本。 如果没有发现错误,脚本将继续发送邮件。 我遇到的问题是,无论数组是否为空(即包含通过var_dump()
确认的所有空值)或包含实际错误值,if 语句始终将其识别为包含数据,并将停止上述脚本。
if ($errors != null){
var_dump($errors);
echo json_encode( $errors );
exit;
};
这是我从 var_dump(array) 得到的结果,JSON 编码总是认为它不等于 $errors=null:
结果:[null,null,null] contact_form.htm:323:13
一个完整的阵列null
值不为空,也不是等于null
,你正在测试。 考虑一下:
$errors = [null, null, null];
echo $errors == null ? "true\n" : "false\n";
echo empty($errors) ? "true\n" : "false\n";
输出:
false
false
相反,您可以测试array_filter($errors)
的输出,如果$errors
中的所有值都为空,它将是一个空数组:
echo empty(array_filter($errors)) ? "true\n" : "false\n";
输出:
true
因此,尝试将您的代码更改为:
if (!empty(array_filter($errors))) {
考虑这种替代方法:使用一个变量$errors = []
。 当您验证输入时,添加该数组中相应键下发生的任何错误,例如
if (!validate($name)) {
$errors['name'] = 'Please enter a valid name';
}
然后,如果没有错误,则数组将为空,因此有条件地打印它会变得更简单一些。
if ($errors) { // empty array evaluates as false, non-empty as true
echo json_encode($errors);
exit;
}
将所有错误收集在一个变量中而不是使用单独的变量可能是有利的。 一个是当您添加另一个表单字段时,您不必记住将其错误变量添加到收集所有不同错误变量的数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.