PHP foreach将每9个项目排序到列表和div中

时间:2013-07-26 13:17:39

标签: php foreach

我目前很难将foreach循环排序到它自己的div和ul中,这是我目前所拥有的:

<ul class="thumbnails parts-page">
<?php $show = false; ?>
<?php foreach ($this->items as $item) : ?>
    <?php if($item->state == 1 || ($item->state == 0 && JFactory::getUser()->authorise('core.edit.own',' com_parts'))):
        $show = true;
    ?>
        <li class="span4">
            <a href="<?php echo $item->brand_link; ?>" style="background:url(<?php echo $item->brand_image; ?>) no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>
    <?php endif; ?>

<?php endforeach; ?>
</ul>

基本上这会产生:

<ul class="thumbnails parts-page">
            <li class="span4">
            <a href="http://www.canecreek.com/" style="background: url('/torqzone/images/brands/cane-creek.png') no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>

            <li class="span4">
            <a href="http://www.amclassic.com/en/" style="background: url('/torqzone/images/brands/american-classic.png') no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>

            <li class="span4">
            <a href="http://www.avid.com/US/" style="background: url('/torqzone/images/brands/avid.png') no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>
</ul>

但是我需要拆分它,以便每9个项目都是自己的:

<ul class="thumbnails parts-page">
9ITEMS
</ul>

我尝试过在网上找到的各种解决方案,但似乎没什么用。

任何帮助都非常赞赏。

7 个答案:

答案 0 :(得分:3)

一个非常简单易读的解决方案是使用array_chunk

<?php foreach (array_chunk($this->items, 9) as $items): ?>
  <ul>
    <?php foreach ($items as $item): ?>     
      <!-- your code -->
    <?php endforeach; ?>
  </ul>
<?php endforeach; ?>

是的,它是一个额外的循环,但更具可读性。

答案 1 :(得分:1)

<?php 
$i=0;
foreach ($this->items as $item) : ?>
    <?php if($item->state == 1 || ($item->state == 0 && JFactory::getUser()->authorise('core.edit.own',' com_parts'))):
        $show = true;
++$i;    
?>
        <li class="span4">
            <a href="<?php echo $item->brand_link; ?>" style="background:url(<?php echo $item->brand_image; ?>) no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>
<?php if($i>8): $i=0; ?>
</ul><ul class="thumbnails parts-page">
<?php endif; ?>
    <?php endif; ?>

<?php endforeach; ?>

而不是上面的代码替换此

答案 2 :(得分:1)

如何使用计数器变量?

$counter = 0;
<?php $show = false; ?>
<?php foreach ($this->items as $item) : ?>
    <?php if ($counter % 9 == 0) 
         echo '<ul class="thumbnails parts-page">';?>


    <?php if($item->state == 1 || ($item->state == 0 && JFactory::getUser()->authorise('core.edit.own',' com_parts'))):
        $show = true;
    ?>
        <li class="span4">
            <a href="<?php echo $item->brand_link; ?>" style="background:url(<?php echo $item->brand_image; ?>) no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>
    <?php endif; ?>

   <?php if ($counter % 9 == 0) 
         echo '</ul>';?>

<?php $counter +=1 ?>
<?php endforeach; ?>

通过这种方式,您将在列表的每9个项目中打印 ul 标记(将它们放入其中)。 (因为我现在没有环境,所以请对代码进行测试)

答案 3 :(得分:1)

使用类似的东西:

echo '<ul ...>';
$i = 0;
foreach ( ...... ) {
  if (++$i % 9 == 0) echo '</ul><ul ....>';

  // your code here

}
echo '</ul>';

答案 4 :(得分:0)

设置一个等于1的变量。每次运行循环时增加它。如果是> 9,创建一个新的ul,否则将其添加到旧的ul。

答案 5 :(得分:0)

最简单的方法是创建一个每次都增加一个的计数器。例如,在代码开头声明$ count,并在每个语句中声明$ count ++。然后,您可以创建一个IF语句,指出如果计数为9,则创建新的UL。

似乎人们试图让这太复杂。

答案 6 :(得分:0)

根据我的理解,你想要的是每个无序列表必须只包含9个项目..如果是这样,你可以使用计数变量

<?php $show = false; $count=0; ?>
<?php foreach ($this->items as $item) : ?>
    <?php if($item->state == 1 || ($item->state == 0 && JFactory::getUser()->authorise('core.edit.own',' com_parts'))):
        $show = true;
    ?>
 <?php if($count%9==0) echo'<ul class="thumbnails parts-page">'; ?>
        <li class="span4">
            <a href="<?php echo $item->brand_link; ?>" style="background:url(<?php echo $item->brand_image; ?>) no-repeat center center #FFF; "  class="thumbnail parts" target="_blank">
            </a>
        </li>
  <?php if($count%9 ==0) echo '</ul>'; ?>
   <?php $count++; ?>
    <?php endif; ?>

<?php endforeach; ?>
</ul>