4

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

4 回答 4

13

“foreach-where”与“foreach-if”完全相同,因为无论如何 PHP必须遍历所有项目以检查条件。

你可以把它写在一行上,以体现“哪里”的精神:

foreach ($themes as $theme) if ($theme['section'] == 'headcontent') {
    // Something
}

这实际上与问题末尾建议的构造相同;您可以以相同的方式阅读/理解它。

但是,它没有解决这样一个事实,即在问题的特定场景中,使用任何类型的“foreach-where”构造实际上会多次循环所有项目。答案在于将所有测试和相应的处理重新组合到一个循环中。

于 2015-04-03T12:20:32.877 回答
2

使用SWITCH声明。

 <?php
    foreach($themes as $theme)
      {
        switch($theme['section'])
        {
            case 'headcontent':
                //do something
                break;
            case 'main content':
                //do something
                break;
        }
       }
    ?>
于 2013-09-24T11:46:10.110 回答
0

你最好用for loop这样的

<?php 
    $cnt = count($themes);
    for($i = 0;$i < $cnt,$themes[$i]['section'] == 'headcontent' ;$i++){

    }
?>
于 2013-09-24T11:48:09.160 回答
0

如果有人使用 MVC 框架,“foreach where”的答案就在这里

<?php foreach ($plans as $plan) if ($plan['type'] == 'upgrade'): ?>

    // Your code here

<?php endif; ?>

请记住,之后不需要endforeach;声明endif;

如果有人想在 和 之间编写更多代码endif;endforeach;那么上面应该是:

<?php foreach ($plans as $plan): if ($plan['type'] == 'upgrade'): ?>

    // Your code here

<?php endif; ?>

    // More of your code

<?php endforeach; ?>
于 2019-08-07T20:24:57.767 回答