PHP Foreach,Where

时间:2013-09-24 11:43:18

标签: php loops foreach where

有没有办法在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')

可以这样做

4 个答案:

答案 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;