我如何在php foreach循环中交替div元素

时间:2012-11-06 00:01:48

标签: php javascript html

我有一组我从数据库中回来的数组,我正在使用php foreach循环来完成它们。如果我返回5个数组[1, 2, 3, 4, 5],每个数组包含一个(时间,状态,位置),我想要为具有特定div的所有偶数数组设置样式,并且每个奇数具有不同的div。我该怎么做?

我假设我会使用带有模运算符的循环。

for ($i = 1; $i <= $count; $i++)
    if ($i % 2 == 0) {

    } else {

    }
}

<?php foreach ($reservation as $seat) : ?>

如果是数组1,3,5。

 <div style="font-size:20px; background-color: #red; float:left;">
 <?php echo $seat['location']; ?>
 <?php echo $seat['time']; ?> 
 <?php echo $seat['status']; ?> </div>

如果是数组2,4

<div style="font-size:20px; background-color: #blue; float:right;">
 <?php echo $seat['location']; ?>
 <?php echo $seat['time']; ?> 
 <?php echo $seat['status']; ?> </div>


<?php endforeach ?>

4 个答案:

答案 0 :(得分:4)

看起来很合理,但是:

background-color: #blue;

没有意义。 '#'用作十六进制颜色值的前缀,而你有一个颜色名称,所以你想要:

background-color: blue;

background-color: #0000ff;

另外,您是否知道,在现代浏览器(即IE9+)中,交替设置样式的元素只能通过CSS3实现,例如

div:nth-child(odd) { background-color: blue; }

检查

答案 1 :(得分:3)

您不必使用foreach循环来枚举数组的所有元素:

for ($i=1; $i <= $count; $i++) {
    $seat = $reservation[$i-1];
    if ($i % 2 == 0) {
        // Do your 2 and 4
    } else {
        // Do your 1, 3 and 5
    }
}

我建议在div中设置CSS-classes“odd”和“even”,然后在单独的文件中设置它们。如果需要,还可以使用CSS3伪类:nth-child(odd):nth-child(even)

答案 2 :(得分:2)

只要你保留一个计数器,你的模数测试甚至可以在foreach循环中在线完成:

$ cat divloop.php 
<?php

$a=array( "one", "two", "three", "four", "five" );

$fmt="<div class='reservation %s'>%s</div>\n";

$count=0;

foreach ($a as $item) {
  printf($fmt, ++$count % 2 == 0 ? "even" : "odd", $item);
}

结果:

$ php divloop.php 
<div class='reservation odd'>one</div>
<div class='reservation even'>two</div>
<div class='reservation odd'>three</div>
<div class='reservation even'>four</div>
<div class='reservation odd'>five</div>
$ 

此时使用显式类更安全,而不是依赖可能无法全面使用的浏览器功能。至少每个人似乎都了解基本的CSS。 :)

.reservation {
  font-size: 20px;
  float: left;
}

.even {
  background-color: #blue;
}

.odd {
  background-color: #red;
}

答案 3 :(得分:0)

如果你将计数器放在foreach中会怎么样。

$count = 0;
<?php foreach ($reservation as $seat) : ?>
if ($count % 2 == 0){
  //even div 
}else {
  // odd div
}
$count++;

<?php endforeach ?>