【发布时间】:2020-01-26 23:33:40
【问题描述】:
如果 API 给出以下响应,考虑到 array[0] 和 array[1] 有时可以是值 MX,有时可以是值 AR:
["published_sites"]=>
array(3) {
[0]=>
object(stdClass)#1565 (5) {
["site"]=>
string(2) "MX"
["sale_price"]=>
int(956)
["status"]=>
string(6) "active"
["item_id"]=>
string(12) "MLM724808"
["url"]=>
string(108) "http://articulo.mercadolibre.com.mx/MLM-722808-apple-apple-watch-series-4-gps-cellular-44mm-space-bla-_JM"
}
[1]=>
object(stdClass)#1569 (3) {
["site"]=>
string(2) "AR"
["sale_price"]=>
int(956)
["status"]=>
string(6) "active"
["item_id"]=>
string(12) "MLM724808"
["url"]=>
string(108) "http://articulo.mercadolibre.com.ar/MLM-722808-apple-apple-watch-series-4-gps-cellular-44mm-space-bla-_JM"
}
要保存在数据库中,您需要创建一个包含以下字段的数组,以便为 AR 和 MX 分配值:
Channels::updateOrCreate(['mpid' => $response->mpid], [
'mpid' => $response->mpid,
'published_site_ar_item_id' => $assign item_id for AR, eg: $item_ar_assign
'published_site_mx_item_id' => $assign item_id for MX,
考虑到 Array 只能对条件使用三元运算符,我尝试使用以下结构,但对多个条件使用 Or 不起作用。 ->
item_ar_assign = ($response->published_sites['0']->site == 'AR' ?: $response->published_sites['0']->item_id)
||($response->published_sites['1']->site == 'AR' ?: $response->published_sites['1']->item_id)
||($response->published_sites['2']->site == 'AR' ? : $response->published_sites['2']->item_id)
这种三元运算符 + 多个条件的方法可以用于数组吗?
(注意:我为 Ternary operator with multiple conditions 之类的重复内容阅读了 SO,但我不认为是相同的方法。)
【问题讨论】:
-
为什么你使用 === 作为第二个条件?
-
@Nawin 抱歉,拼写错误。解决了
-
使用
?:,它将返回左侧(您正在执行== 'AR'时是真还是假)或:之后的部分 - 你的意思是$response->published_sites['0']->site == 'AR' ? 'AR': $response->published_sites['0']->item_id -
嗨@NigelRen,我的想法是如果数组['0']返回true,则返回“$response->published_sites['0']->item_id”字符串,或者$response->如果数组 ['1'] 返回 true,则 published_sites['1']->item_id。我不知道这是否是正确的方法,但我需要在数组中添加一个条件,并且确定 if,elseif,else 不起作用。谢谢!。
标签: php laravel ternary-operator