Php动态地将类添加到第一个和最后一个块

时间:2015-08-24 10:59:00

标签: php arrays

我有一个像这样的数组

$products_array = array('test product', 'test new product', 'test lipsum', 'test lorem',  ....);

我刚刚从数组中获取了值

echo '<ul>';
foreach( $products_array as $product_array ) {
    echo '<li>$product_array</li>';
}
echo '</ul>';

但在这里我想要一些动态的东西。我想根据用户设置的值添加类名。假设用户希望连续显示5个列表,那么标记就像这样

<ul>
    <li class="first">test product</li>
    <li>test new product</li>
    <li>test lipsum</li>
    <li>test lorem</li>
    <li class="last">test update</li>
    <li class="first">test new product</li>
    <li>test a product</li>
    <li>test new lipsum</li>
    <li>test lorem</li>
    <li class="last">test new update</li>   
 </ul>

所以在这里你可以看到最后的意思是在每个帖子后面添加它的最后一个并且它首先将类添加到第一个列表和fifith列表块之后。因此,当用户设置$ class = 3时,它会将最后一个类添加到第三个块,第一个将被添加到第一个和第三个,第六个,第九个之后的列表块等

我这样做了

$last = '4' //set 4. so for 4th,8th,12th it will add class last. and for 1st, 5th, 9th it will add class first

 echo '<ul>';
 $i = 0;
 $count = count($products_array);
foreach( $products_array as $product_array ) {
$i++;
$class = '';
if( $i == $count ) {
$class = 'last';
}
    echo '<li class='.$class.'>$product_array</li>';
}
echo '</ul>';

但它不起作用。所以可以告诉我该怎么做?任何帮助和建议都会非常明显。感谢

2 个答案:

答案 0 :(得分:3)

使用模数确定要添加的类。逻辑是......

  1. 当余数为0时,我们在每个组的最后一项( n nth
  2. 当余数为1时,我们在每个组的第一项( n 1st
  3. 否则,我们处于中间位置
  4. 例如

    $last = 4;
    ?>
    <ul>
    <?php
    foreach ($products_array as $index => $product) :
    switch(($index + 1) % $last) { // array indexes are 0-based so add 1
        case 0 :
            $class = 'last';
            break;
        case 1 :
            $class = 'first';
            break;
        default :
            $class = '';
    }
    ?>
    <li class="<?= $class ?>"><?= htmlspecialchars($product) ?></li>
    <?php endforeach ?>
    </ul>
    

    eval.in demo

答案 1 :(得分:0)

这应该可以解决问题。你也可以使用模数,但我不太确定它的小perPage设置如何表现。

//your perPage-setting, change this for more elements per page
$perPage = 3;
$count = count($products_array);
//loop over elements
for($i = 1; $i <= $count; $i++) {
    $className = "";
    if($i / $perPage == 0) {
        $className = "last";
    } else if((floor($i / $perPage) * $perPage + 1 == $i)
        $className = "first";
    echo '<li class='.$className.'>'.$product_array[$i-1].'</li>';
}