有没有办法在PHP中为foreach方程添加where类。
目前我正在向这样的foreach添加一个if。
<?php foreach($themes as $theme){
if($theme['section'] == 'headcontent'){
//Something
}
}?>
<?php foreach($themes as $theme){
if($theme['section'] == 'main content'){
//Something
}
}?>
据推测,PHP必须遍历每个结果的所有结果。有没有更有效的方法来做到这一点。像
这样的东西 foreach($themes as $theme where $theme['section'] == 'headcontent')
可以这样做
答案 0 :(得分:9)
“foreach-where”与“foreach-if”完全相同,因为无论如何PHP 已经遍历所有项目以检查条件。
你可以在一行上写下来反映“where”精神:
foreach ($themes as $theme) if ($theme['section'] == 'headcontent') {
// Something
}
这与问题末尾提出的结构非常相似;你可以用同样的方式阅读/理解它。
然而,它没有解决这样一个事实:在问题的具体情况中,使用任何类型的“foreach-where”结构实际上会循环遍历所有项目几次。答案就在于将所有测试和相应的处理重新组合成一个循环。答案 1 :(得分:1)
使用 SWITCH
声明。
<?php
foreach($themes as $theme)
{
switch($theme['section'])
{
case 'headcontent':
//do something
break;
case 'main content':
//do something
break;
}
}
?>
答案 2 :(得分:0)
您最好使用for loop
,就像
<?php
$cnt = count($themes);
for($i = 0;$i < $cnt,$themes[$i]['section'] == 'headcontent' ;$i++){
}
?>
答案 3 :(得分:0)
如果有人使用MVC框架,“ foreach where”的答案就在这里
let!(:foo) {create :foo}
context 'new foo' do
let!(:foo) {}
end
记住,在<?php foreach ($plans as $plan) if ($plan['type'] == 'upgrade'): ?>
// Your code here
<?php endif; ?>
之后不需要endforeach;
语句
如果有人想在endif;
和endif;
之间编写更多代码,则上述内容应为:
endforeach;