php - 需要时跟进[如何检查JSON对象是否为空或值] = true
问题描述
请原谅我提出问题的方式,但这是对我上一个问题的跟进如何检查 PHP [JSON] 中的值是否为空,我有 4 个答案,但我无法解决,请帮助我出去,试了三天什么都没有,
我在下面的 JSON 中有对象和值,我想要实现的很简单,可以说“payment_type”对象是空的,我想告诉用户它的空响应
payment_type 参数是必需的,如果它的值是空的,那就是“1”我用payment_type value is required回复,我想告诉用户,我的问题是
// api.php
public function create_insert_new_delivery()
{
$payment_type = $this->validateParameter(
'payment_type',
$this->param['payment_type'],
STRING,
true
);
$date_of_delivery = $this->validateParameter(
'date_of_delivery',
$this->param['date_of_delivery'],
STRING,
true
);
$waybill_number = $this->validateParameter(
'your_generated_waybill_number',
$this->param['your_generated_waybill_number'],
STRING,
true
);
}
{
"name":"create_insert_new_delivery",
"param":{
"payment_type":"1",
"date_of_delivery":"B",
"your_generated_waybill_number":"39ei40909444567avaaaaba",
}
}
我尝试过但效果不佳 从上一个问题中得到答案,它只显示此错误“ $this->throwError(EMPTY_PARAMETER, $fieldName . " value is required"); "
// rest.php
/**
* @param string $fieldName e.g payment_type
* @param mixed $value e.g 1
* @param bool $required is equal to true for strings
*/
public function validateParameter($fieldName, $value, $required = true){
if ($required AND empty($fieldName)) {
$this->throwError(API_PARAM_REQUIRED, $fieldName . " parameter is missing");
} elseif ($required AND empty($value)) {
$this->throwError(EMPTY_PARAMETER, $fieldName . " value is required");
} elseif (!empty($fieldName) AND empty($value) AND $required){
$this->throwError(EMPTY_PARAMETER, $fieldName . " value is required");
}
}
解决方案
如果我理解您的问题,则在读取数组中不存在的条目时需要小心。PHP 将触发警告/通知并传递一个空值,这可能不是您所期望的。这是我要使用的代码:
public function create_insert_new_delivery()
{
$payment_type = $this->validateParameter(
$this->param,
'payment_type',
STRING,
true
);
$date_of_delivery = $this->validateParameter(
$this->param,
'date_of_delivery',
STRING,
true
);
$waybill_number = $this->validateParameter(
$this->param,
'your_generated_waybill_number',
STRING,
true
);
}
public function validateParameter($params, $fieldName, $required = true)
{
if ($required) {
if (!array_key_exists($fieldName, $params)) {
$this->throwError(API_PARAM_REQUIRED, "$fieldName parameter is missing");
} elseif (empty($params[$fieldName])) {
$this->throwError(EMPTY_PARAMETER, "$fieldName value is required");
}
}
return $params[$fieldName];
}
我做了不同的事情:
- 我没有传递值,而是传递了整个参数数组并在里面进行了检查
- 我使用
array_key_exists
, 因为empty()
当值为空时返回 true (并且您特别想检查密钥何时丢失) - 我简化了条件
- 我已经返回了值(这是由函数的使用暗示的,但在原始代码中缺失)
推荐阅读
- java - 我们可以更改使用 aws DMS 迁移服务迁移的值吗?
- javascript - 使用 Javascript 重用 HTML 块和插入动态内容的正确方法
- ios - 按下播放按钮时,YouTube IFrame 播放器显示“此视频不可用”
- windows - 如何从命令提示符打开目录中的所有文件
- loops - 如何遍历 Svelte 模板中的对象数组?
- excel - 如何使用 Excel VBA 转换定义的名称?
- java - 具有不同数据库的抽象路由数据源
- c# - 我的控制器功能没有从数据库中获取任何记录
- c# - 如何将多重集随机拆分为预定大小的集合,而不重复?
- excel - 在不考虑特定值的情况下,从 excel 中的某个范围内提取唯一值