我对foreach外观中的if / elseif条件有这个问题。我一遍又一遍地搜索,真的没有想法。 所以我有这个数组:
阵 (
[0] => stdClass Object
(
[title] => main
[value] => value1
)
[1] => stdClass Object
(
[title] => other
[value] => value2
)
[2] => stdClass Object
(
[title] => second
[value] => value3
)
[3] => stdClass Object
(
[title] => other
[value] => value4
)
[4] => stdClass Object
(
[title] => other
[value] => value5
)
)
正如您所见,obj0的title => main而obj2的title =>秒,其余的“titles”则设置为other。
我有这个foreach:
foreach ($objects as $object):
if($object->title == 'second') {
//this value is rarely added, so it must have a "priority" and be showed
echo '<span></span>';
} elseif($object->title == 'main') {
//i mostly want to show this, but not if $object->title has the value 'second'.
echo '<div></div>';
}
endforeach;
这个循环返回“span”和“div”,我不想要。我无法设法只显示title =&gt;“second”(如果它在那里),而title =&gt;“main”仅在“second”不存在时才显示。所以要么显示跨度,要么是div。
希望我解释好,如果不是我道歉!非常感谢,非常感谢你的帮助!
的Marius
答案 0 :(得分:2)
如果任何一个位置可能出现在数组中的任何位置 - 即main
可能出现在second
之前(看起来就是这种情况) - 在做出决定之前,你必须循环整个数组显示:
$main = $second = FALSE;
foreach ($objects as $object):
if($object->title == 'second') {
$second = TRUE;
break; // Added as @PeterKrejci pointed out
} elseif($object->title == 'main') {
$main = TRUE;
}
endforeach;
if($second) {
echo '<span></span>';
} elseif($main) {
echo '<div></div>';
}
如果second
始终显示在main
之前,那么所需要的只是break
的几个:
foreach ($objects as $object):
if($object->title == 'second') {
echo '<span></span>';
break;
} elseif($object->title == 'main') {
echo '<div></div>';
break;
}
endforeach;
答案 1 :(得分:1)
Foreach迭代该数组中的所有条目,因此您必须在第一次匹配后将其中断,您可以在break;
之后使用echo
跳出foreach