如何使用三元运算符编写这些“if..else”条件语句
How to write these `if..else` conditional statements with Ternary Operators
我想用三元运算符编写这些 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 中插入一些数据 class):
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()
]);
所以我的问题是,如何在一行中添加这个带有三元运算符的条件语句?
你可以试试这个。这个想法是用第二个三元替换第一个 :
之后的语句。仅当第一个条件为 false 时,才会评估第二个三元组。
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()
]);
一个选项是构建数组然后插入
$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()
]);
使用 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')
)
)
)
"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 才能 'city sending' ...
...所以所有其他情况都是 'country sending'...
...当购物车价格 >= 300000
我想用三元运算符编写这些 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 中插入一些数据 class):
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()
]);
所以我的问题是,如何在一行中添加这个带有三元运算符的条件语句?
你可以试试这个。这个想法是用第二个三元替换第一个 :
之后的语句。仅当第一个条件为 false 时,才会评估第二个三元组。
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()
]);
一个选项是构建数组然后插入
$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()
]);
使用 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')
)
)
)
"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 才能 'city sending' ...
...所以所有其他情况都是 'country sending'...
...当购物车价格 >= 300000