【问题标题】:foreach loop - different class per itemforeach 循环 - 每个项目不同的类
【发布时间】:2012-12-28 18:48:30
【问题描述】:

我需要为 foreach 循环中的每 6 个 div 赋予不同的类名。我认为我下面的想法会奏效,但每个项目似乎都有相同的 div。

<?php $num = 0; ?>
<?php foreach ($divs as $div): ?>

    <?php if($num % 1 == 0): ?>
    <div class="threecol grey one">
    <?php elseif($num % 2 == 1): ?>
    <div class="threecol green two ">
    <?php elseif($num % 3 == 2): ?>
    <div class="sixcol blue last three">
    <?php elseif($num % 4 == 3): ?>
    <div class="threecol grey">
    <?php elseif($num % 5 == 4): ?>
    <div class="sixcol blue">
    <?php elseif($num % 6 == 5): ?>
    <div class="threecol green last">
    <?php endif; ?>

        Rest of html

    </div>

<?php $num++ ?>
<?php endforeach; ?>

为了简化我基本上需要

1st/7th/13th/19th...等 div 为 &lt;div class="threecol grey"&gt;

2nd/8th/14th/20th...等为&lt;div class="threecol green"&gt;

3rd/9th/15th/21st...等为&lt;div class="sixcol blue last"&gt;

第 4 次/第 10 次/第 16 次/第 22 次 &lt;div class="threecol grey"&gt;

5th/11th/17th/23th &lt;div class="sixcol blue"&gt;

6th/12th/18th/24th &lt;div class="sixcol blue"&gt;

【问题讨论】:

  • 为了避免所有这些情况,我会使用带有类的数组并使用class="&lt;?php echo $classes[$num]; ?&gt;" 或类似的东西。

标签: php foreach


【解决方案1】:
<?php if(floor($num / 6) == 0): ?>
<div class="threecol grey one">
<?php elseif(floor($num / 6) == 1): ?>
<div class="threecol green two ">
<?php elseif(floor($num / 6) == 2): ?>
<div class="sixcol blue last three">
<?php elseif(floor($num / 6) == 3): ?>
<div class="threecol grey">
<?php elseif(floor($num / 6) == 4): ?>
<div class="sixcol blue">
<?php elseif(floor($num / 6) == 5): ?>
<div class="threecol green last">
<?php endif; ?>

这将给出:

  • threecol grey one 用于从 0 到 5 的列
  • threecol grey two 用于从 6 到 11 的列
  • 等等..

【讨论】:

  • 谢谢,也许我解释得不对,但我基本上需要隔离6个div(每6个div)。所以为了简化,我需要 1st/7th/13th/19th...etc div 是 &lt;div class="threecol grey"&gt; 然后 2nd/8th/14th/20th...etc 是 &lt;div class="threecol green"&gt; 然后是 3rd/9th/15th/21st。 ..等为&lt;div class="sixcol blue last"&gt;。我会更新问题。
  • 在这种情况下,请查看其他答案,他们有您需要的解决方案
【解决方案2】:

您误解了导致剩余股息的模运算符。因此,% 1始终为零,因为该操作永远不会有余数。你想这样做:

$num % 6 == 1
...
$num % 6 == 2

等等。您也可以提前$num % 6 并将其存储在变量中。

【讨论】:

  • 我想他想要一个 num 0 到 5 的课程,另一个 6 到 11 的课程,另一个 12 到 17 的课程......
  • @MajidLAISSI 在这种情况下,只需每 6 个条目而不是每个条目增加 $num
  • 其实我不确定他想要什么
【解决方案3】:
<?php foreach ($divs as $i => $div): ?>
    <?php if($i % 6 == 0): ?>
    <div class="threecol grey one">
    <?php elseif($i % 6 == 1): ?>
    <div class="threecol green two ">
    <?php elseif($i % 6 == 2): ?>
    <div class="sixcol blue last three">
    <?php elseif($i % 6 == 3): ?>
    <div class="threecol grey">
    <?php elseif($i % 6 == 4): ?>
    <div class="sixcol blue">
    <?php elseif($i % 6 == 5): ?>
    <div class="threecol green last">
    <?php endif; ?>
        Rest of html
    </div>
<?php endforeach; ?>

考虑使用 switch case 语句。

【讨论】:

  • 我想他想要一个 num 0 到 5 的课程,另一个 6 到 11 的课程,另一个 12 到 17 的课程......
【解决方案4】:

很丑……为什么不

$classes = array('grey one', 'green two', 'blue last three', 'grey', 'blue', 'green last');
foreach($divs as $div) {
   $class = $classes[$i++ % 6];
   echo '<div class="threecol ' . $class . '">';
}

主要问题是您在模运算中不断更改除数,因此您总是得到 0 余数。

【讨论】:

  • 谢谢,这似乎是唯一有效的答案。可能我的解释不够清楚。再次感谢
猜你喜欢
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2018-03-24
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多