回应PHP字符串

时间:2012-11-29 22:02:04

标签: php css

好的我已经让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>

6 个答案:

答案 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>';
}