好的我已经让PHP成功打开并读取包含许多图像的目录的内容。我将所有这些数据传递到一个数组中,对结果进行排序,最后遍历所有图像,以便它给我一个刺痛,然后我回显到html页面。在这个字符串中,我为每个div设置了css类,以便在页面呈现时正确显示每个div。
我的问题是用实际的PHP设置每个div的类。基本上我有两个类,我应用于每个div取决于它们是什么数字。例如,在第一个水平行中,第1到第3个div获得.box
类,以便设置margin-right:10px;
,第4个获取它自己的.box last
类设置margin-right:0px;
}}
所以我想问的是有没有办法写一些逻辑来告诉PHP代码为第1到第3个div应用一个类,为每一行每个第4个div应用一个单独的类?实际上是前三个div行上的类和每行的第四个div得到另一个?
<?php
$dir = "images/";
$images = array();
$returnstr = "";
if ($handle = opendir($dir)) {
while ( false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".."){
$images[] = $entry;
}
}
closedir($handle);
}
natsort($images);
$newArray = array_values($images);
foreach ($newArray as $key => $value) {
$returnstr .= '<li class="box">';
$returnstr .= '<a href="#" name="" class="thumb" id="' . $key . '"><img src="'. $dir . '/' . $value . '"/></a>';
$returnstr .= '</li>';
}
?>
这是第1至第3个div的CSS ......
.box {
float: left;
/*margin-right:10.5px;*/
margin-right:10px;
/*width: 92px;
height: 92px; */
width: 232.5px;
height:150px;
/*height: 232px; */
/*background-color: #999;
border: 1px solid*/
margin-bottom: 10px;
list-style: none;
}
...以及网格中每个第4个div的CSS
.box.last {
margin-right: 0px;
}
这是我试图实现的HTML。
<li class="box">
<a href="#" name="cap1" class="thumb" id=""><img src="images/1.jpg"/></a>
</li>
<li class="box">
<a href="#" name="cap2" class="thumb" id=""><img src="images/2.jpg"/></a>
</li>
<li class="box">
<a href="#" name="cap3" class="thumb" id=""><img src="images/3.jpg"/></a>
</li>
<li class="box last">
<a href="#" name="cap4" class="thumb" id=""><img src="images/4.jpg"/></a>
</li>
答案 0 :(得分:1)
您可以使用css选择器为第四个.last
元素添加特殊边距,而不是使用php添加<li>
类:
li.box:nth-child(4){
margin-right: 0px;
}
哪个适用于作为其父容器的第4个子容器的任何<li>
答案 1 :(得分:0)
您需要使用模数,例如:
foreach ($newArray as $key => $value) {
$returnstr .= '<li class="box';
if (($key > 0) && (($key % 4) == 0)) {
$returnstr .= ' last';
}
$returnstr .= '">';
$returnstr .= '<a href="#" name="" class="thumb" id="' . $key . '"><img src="'. $dir . '/' . $value . '"/></a>';
$returnstr .= '</li>';
}
答案 2 :(得分:0)
这可以通过将foreach
循环更改为:
$i = 1;
foreach ($newArray as $key => $value) {
$last_class = ($i == 4) ? ' last' : '' ;
$returnstr .= '<li class="box' . $last_class . '">';
$returnstr .= '<a href="#" name="" class="thumb" id="' . $key . '"><img src="'. $dir . '/' . $value . '"/></a>';
$returnstr .= '</li>';
$i++;
}
这样,无论$key
是什么(在关联数组的情况下),你仍然只将它应用于第四项。
答案 3 :(得分:0)
foreach( $newArray as $key => $value ) {
if( $key % 4 == 0 ) {
$returnstr .= '<li class="box last">';
} else {
$returnstr .= '<li class="box">';
}
}
试试。
答案 4 :(得分:0)
这可能很脏,但您可以按如下方式使用计数器:
$counter = 1;
foreach ($newArray as $key => $value) {
if ($counter==4) {
$returnstr .= '<li class="last">';
}
else
{
$returnstr .= '<li class="box">';
}
$returnstr .= '<a href="#" name="" class="thumb" id="' . $key . '"><img src="'. $dir . '/' . $value . '"/></a>';
$returnstr .= '</li>';
$counter++;
}
应该这样做。
答案 5 :(得分:0)
您可以使用modulus operator, %以及每次循环时递增的整数来执行此操作。简单的例子:
<?php
$n = 0;
foreach ($newArray as $key => $value) {
$n++;
if($n > 0 && ($n % 4) === 0){
$everyFourthRowCss = " last";
} else {
$everyFourthRowCss = "";
}
$returnstr .= "<li class='box{$everyFourthRowCss}'>";
$returnstr .= '<a href="#" name="" class="thumb" id="' . $key . '"><img src="'. $dir . '/' . $value . '"/></a>';
$returnstr .= '</li>';
}