【问题标题】:Is there a better way to deal with certain iterations rather than if statement?有没有更好的方法来处理某些迭代而不是 if 语句?
【发布时间】:2014-03-20 20:52:52
【问题描述】:

我正在尝试实现相当复杂的布局。我已经做到了,但不禁认为 IF 语句有点缺乏细化。

我有一个 for 循环,它遍历网格项目,第一个项目和每 5 个项目较大,并且每隔一个大项目浮动到右侧而不是左侧。连续的每个大的都有四个小项目(因此大的与四个小的大小相同)。

我只是觉得我的 IF 不是特别优雅,而且还限制了网格的大小。

$i = 0;
foreach ($items as $item) { 
    if ($i % 5 == 0) { ?>
        <article <?php if ($i == 5 || $i == 15 || $i == 25 || $i == 35 || $i == 45 || $i == 55) { ?>style="float:right;" <?php } ?>>
        //do big item
        </article>
    } else { 
        <article>
        //do small item
        </article>
    }
$i++;
}

我还试图弄清楚如何将每行 5 个项目包装在另一个 div 中以帮助调整大小?我在想另一个块 if ($i % 5 == 0) { 可能会对此有所帮助,但我也意识到加载时间和最佳实践。

一如既往地非常感谢任何帮助!

【问题讨论】:

  • 在您的代码中,您没有增加$i 的值,这如何工作?
  • 如果这是为了造型,您也可以查看CSS nth child selector。这是我要走的路线。
  • 对不起,我在我的代码中,我简化了上面的代码以便于阅读。不过我现在要编辑它

标签: php if-statement for-loop


【解决方案1】:

只需引入第二个 mod 运算符。例如。

if ($i % 5 == 0){
 if ( ($i-5) % 10 == 0 ){
   // so this will work for values of %i = 5, 15, 25, 35 ...
   // big article
 }else{
   // small article
 }
$i++ ; // as previous comment @javad pointed out. You are not incrementing i

【讨论】:

  • 很酷,谢谢,这很好地替换了我的 IF,我可以看到数学现在在我面前工作。不过,我认为将每 5 个项目包装在自己的 div 中会很困难,如果我目前的结构可能的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多