繁体   English   中英

编码和解析php数组的问题

[英]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))) {

3v4l.org 上的演示
array_filter手册

考虑这种替代方法:使用一个变量$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM