[英]How can I alternate div elements in php foreach loop
我有一组要从数据库中获取的数组,我正在使用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 ?>
看起来很合理,但是:
background-color: #blue;
没有道理。 “#”用作十六进制颜色值的前缀,而您具有颜色名称,因此需要:
background-color: blue;
要么
background-color: #0000ff;
另外,您知道吗,在现代浏览器(即IE9 + )中,仅通过CSS3即可实现替代样式的元素,例如
div:nth-child(odd) { background-color: blue; }
校验
您不必使用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
}
}
我建议将CSS类“ odd”和“ even”设置为div,然后在单独的文件中设置样式。 如果需要,还可以使用CSS3伪类:nth-child(odd)
和:nth-child(even)
。
只要您保留一个计数器,您的模数测试甚至可以在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;
}
如果您将计数器放在foreach中该怎么办。
$count = 0;
<?php foreach ($reservation as $seat) : ?>
if ($count % 2 == 0){
//even div
}else {
// odd div
}
$count++;
<?php endforeach ?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.