【问题标题】:How to write these `if..else` conditional statements with Ternary Operators如何使用三元运算符编写这些“if..else”条件语句
【发布时间】:2021-09-10 02:20:54
【问题描述】:

我想用三元运算符编写这些if..else 语句:

if((($request->city)=="98")&&($cartPrice >= 300000)&&($request->province)=="8")){
    "ort_free_delivery" => 'City sending free delivery'
}elseif((($request->city)!="98")&&($cartPrice >=300000)&&($request->province)!="8")){
    "ort_free_delivery" => 'Country sending free delivery'
}else{
    "ort_free_delivery" => '',
}

这是我的尝试:

( ( ($request->city)=="98" ) ? ($cartPrice>=300000) ? ( ( ($request->province)=="8" ) ? "ort_free_delivery" == "City sending free delivery" ) ); 

( ( ($request->city)!="98" ) ? ($cartPrice>=300000) ? ( ( ($request->province)!="8" ) ? "ort_free_delivery" == "Country sending free delivery" : "ort_free_delivery" == "" ) ); 

但这是错误的,因为有两行三元运算符,我需要在一行中使用这个条件(因为我在 Laravel 中插入了一些带有 DB 类的数据):

    DB::table('order_detail')->insert([
        "ort_ord_id" => $orderId,
        "ort_amount" => $value->price,
        "ort_total" => $value->discounted * $value->quantity,
        "ort_discount" => ($value->price * $value->quantity) - $value->discounted * $value->quantity,
        "ort_type" => "product",
        "ort_number" => $value->quantity,
        "ort_reference_id" => $value->id,
        ( ( ($request->city)=="98" ) ? ($cartPrice>=300000) ? ( ( ($request->province)=="8" ) ? "ort_free_delivery" == "City sending free delivery" ) )
        ( ( ($request->city)!="98" ) ? ($cartPrice>=300000) ? ( ( ($request->province)!="8" ) ? "ort_free_delivery" == "Country sending free delivery" : "ort_free_delivery" == "" ) )
        "created_at" => now(),
        "updated_at" => now()
    ]);

所以我的问题是,如何在一行中添加这个带有三元运算符的条件语句?

【问题讨论】:

    标签: php laravel if-statement laravel-8 conditional-operator


    【解决方案1】:

    一个选项是构建数组然后插入

    $data=[
            "ort_ord_id" => $orderId,
            "ort_amount" => $value->price,
            "ort_total" => $value->discounted * $value->quantity,
            "ort_discount" => ($value->price * $value->quantity) - $value->discounted * $value->quantity,
            "ort_type" => "product",
            "ort_number" => $value->quantity,
            "ort_reference_id" => $value->id,
            "created_at" => now(),
            "updated_at" => now()
        ];  
    

    对于条件数据

    if($request->city==98&&$cartPrice >= 300000&&$request->province==8){
        $data["ort_free_delivery"] = 'City sending free delivery';
    }elseif($request->city!=98&&$cartPrice >=300000&&$request->province!=8){
         $data["ort_free_delivery"] = 'Country sending free delivery';
    }else{
        $data["ort_free_delivery"] = '';
    }
    

    然后查询

      DB::table('order_detail')->insert($data);
    

    DB::table('order_detail')->insert([
        "ort_ord_id" => $orderId,
        "ort_amount" => $value->price,
        "ort_total" => $value->discounted * $value->quantity,
        "ort_discount" => ($value->price * $value->quantity) - $value->discounted * $value->quantity,
        "ort_type" => "product",
        "ort_number" => $value->quantity,
        "ort_reference_id" => $value->id,
        "ort_free_delivery" =>($request->city==98&&$cartPrice >= 300000&&$request->province==8)?'City sending free delivery':
            (($request->city!=98&&$cartPrice >=300000&&$request->province!=8)?'Country sending free delivery':null),
        "created_at" => now(),
        "updated_at" => now()
    ]);
    

    【讨论】:

      【解决方案2】:

      你可以试试这个。这个想法是用第二个三元组替换第一个 : 之后的语句。只有当第一个条件为假时,才会评估第二个三元组。

          DB::table('order_detail')->insert([
              "ort_ord_id" => $orderId,
              "ort_amount" => $value->price,
              "ort_total" => $value->discounted * $value->quantity,
              "ort_discount" => ($value->price * $value->quantity) - $value->discounted * $value->quantity,
              "ort_type" => "product",
              "ort_number" => $value->quantity,
              "ort_reference_id" => $value->id,
              "ort_free_delivery" => ( ( ($request->city)=="98" ) &&  ($cartPrice>=300000) && ( ($request->province)=="8" ) ) ? "City sending free delivery" : ( ( ($request->city)!="98" ) && ($cartPrice>=300000) && ( ($request->province)!="8" ) ) ? "Country sending free delivery" : "" ) ),
              "created_at" => now(),
              "updated_at" => now()
          ]);
      

      【讨论】:

        【解决方案3】:

        使用var_dump 进行测试,而不是你拥有的,这是我想出的:

        (((($request->city=="98")&&($cartPrice>=300000)&&($request->province=="8"))?var_dump('1'):((($request->city!="98")&&($cartPrice>=300000)&&($request->province=="8"))?var_dump('2'):var_dump('3'))))
        

        以更易读的方式:

        (
            (
                (
                    ($request->city == "98") && 
                    ($cartPrice >= 300000) && 
                    ($request->province == "8")
                )
                ? var_dump('1') 
                : (
                    (
                        ($request->city != "98") && 
                        ($cartPrice >= 300000) && 
                        ($request->province == "8") 
                    )
                    ? var_dump('2')
                    : var_dump('3')
                  )
            )
        )
        

        【讨论】:

          【解决方案4】:
          "ort_free_delivery" => ($cartPrice >= 300000 ? ( $request->city=="98" && $request->province=="8" ? 'City sending free delivery' : 'Country sending free delivery' ) : '')
          

          人工阅读代码:

          如果 cartPrice 低于 300000 总是 ''

          否则,如果两个城市是 98 并且省份同时是 8 (AND)...

          是“城市发送..”

          其他

          是“国家发送..”

          因为

          主要区分规则似乎是 city=98 和 Province=8 都必须为 True 才能成为“发送城市”...

          ...所以所有其他情况都是“国家发送”...

          ...当购物车价格 >= 300000

          【讨论】:

            猜你喜欢
            • 2021-09-15
            • 1970-01-01
            • 2013-10-30
            • 1970-01-01
            • 1970-01-01
            • 2022-12-06
            • 2020-02-14
            • 2018-10-25
            • 1970-01-01
            相关资源
            最近更新 更多