首先,我不确定您为什么认为这里的数组存在特定问题。让我们替换变量,以便我们可以看到代码的重要部分:$site0 = $response->published_sites['0']->site;
$id0 = $response->published_sites['0']->item_id;
$site1 = $response->published_sites['1']->site;
$id1 = $response->published_sites['1']->item_id;
$site2 = $response->published_sites['2']->site;
$id2 = $response->published_sites['2']->item_id;
$item_ar_assign =
($site0 == 'AR' ?: $id0)
|| ($site1 == 'AR' ?: $id1)
|| ($site2 == 'AR' ? : $id2);
这将无法工作的原因与数组无关,而是因为您使用了错误的运算符:PHP的||运算符总是返回一个布尔值-true或false,无论它看什么值。
$a ?: $b的形式表示“ $a如果正确,则为$b”。在这种情况下,$site0 == 'AR' ?: $id0的意思是“如果true为$site0,则为'AR',否则为$id0的值”
我认为您想做的是嵌套三元运算符的完整形式$test ? $valueIfTrue : $valueIfFalse。
请注意,关联性有点奇怪,因此您需要谨慎使用括号。我认为这应该有效:$item_ar_assign =
($site0 == 'AR') ? $id0
: (
$site1 == 'AR' ? $id1
: (
$site2 == 'AR' ? : $id2
)
);
一旦将完整的变量放回去,使用完整的if语句可能看起来会更好。if ($response->published_sites[0]->site == 'AR' ) {
$item_ar_assign = $response->published_sites[0]->item_id;
}
elseif ($response->published_sites[1]->site == 'AR' ) {
$item_ar_assign = $response->published_sites[1]->item_id;
}
elseif ($response->published_sites[2]->site == 'AR' ) {
$item_ar_assign = $response->published_sites[2]->item_id;
}
但是,您可以将其放入循环中,而不是复制粘贴该条件:foreach ( [0, 1, 2] as $site_number ) {
if ($response->published_sites[$site_number]->site == 'AR' ) {
$item_ar_assign = $response->published_sites[$site_number]->item_id;
break; // stop at first match
}
}
或更简单:foreach ( $response->published_sites as $published_site ) {
if ($published_site->site == 'AR' ) {
$item_ar_assign = $published_site->item_id;
break; // stop at first match
}
}