代码之家  ›  专栏  ›  技术社区  ›  Shasha

需要时跟进[如何检查json对象是否为空或值]=true

php
  •  0
  • Shasha  · 技术社区  · 8 年前

    请原谅我的提问方式,但这是我最后一个问题的后续 How to check if value is empty in PHP [JSON] ,我有4个答案,但我还没能解决,请帮帮我,已经试了三天什么都没有,

    我在下面的json中有对象和值,我想实现的很简单,比如说“payment_type”对象是空的,我想用响应告诉用户它是空的
    需要支付参数类型参数 如果它的值是空的,也就是“1”,我会用 付款类型值是必需的 ,我想告诉用户,我的问题是

    // 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(空参数,$fieldname.)值是必需的“); “。”

    // 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");
        }
    }
    

    在邮递员呼叫图像的屏幕截图中,它用  value is empty instead of field name is empty.

    1 回复  |  直到 8 年前
        1
  •  2
  •   Christian    8 年前

    如果我理解您的问题,那么在读取数组中不存在的条目时需要小心。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(您特别希望检查是否缺少键)
    • 我简化了条件
    • 我已经返回了这个值(这是由函数的用法暗示的,但是在原始代码中丢失了)
    推荐文章