PHP循环问题

时间:2010-09-28 02:14:23

标签: php foreach

我的应用程序包含用户上传图像的图库页面。我试图使用foreach循环在页面上显示图像,但是在构建foreach循环时遇到了一些问题。

这就是HTML应该形成的方式

<div class="item">
     <ul>
     <li><a href="images/gallery/love1.jpg" rel="example1" ><img src="images/gallery/thumb_love1.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/love2.jpg" rel="example1" ><img src="images/gallery/thumb_love2.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/love3.jpg" rel="example1" ><img src="images/gallery/thumb_love3.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/love4.jpg" rel="example1"><img src="images/gallery/thumb_love4.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/love5.jpg" rel="example1"  ><img src="images/gallery/thumb_love5.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/love6.jpg" rel="example1"><img src="images/gallery/thumb_love6.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/life1.jpg" rel="example1" ><img src="images/gallery/thumb_life1.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/life2.jpg" rel="example1"><img src="images/gallery/thumb_life2.jpg" alt="#" /></a></li>
     <li><a href="images/gallery/life3.jpg" rel="example1"><img src="images/gallery/thumb_life3.jpg" alt="#" /></a></li>
     </ul>
    </div><!-- end item -->

所以基本上当LI击中9个项目时,中断并开始一个新的DIV class =“item”

以下是我一直尝试使用的PHP代码

<?php
                $x = range(1,100);
                $counter = 1;
                foreach($x as $item):
                if($item == 9) {
            ?>
                <div class="item">
                    <ul>
                        <?php foreach($pictures->result() as $p): ?>
                         <li><a href="images/gallery/<?=$p->category;?>/<?=$p->photo_name;?>" rel="example1" ><img src="images/gallery/<?=$p->category;?>/thumb_<?=$p->photo_name;?>" alt="#" /></a></li>
                    <?php endforeach; ?>
                    </ul>
                </div><!-- end item -->
                <?php $counter = 1; 
                } else {
                    $counter++;
                } ?>
            <?php endforeach; ?>

我已经尝试了一切,但无法弄清楚如何使这项工作。在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

你为什么要开始一个新的div?好像它应该是一个列表。因此,您可以将所有图像放在一个列表中,并使用CSS控制它们的布局。

如果这不正确,那么您要使用的是array_chunk

未经测试...

$picture_chunks = array_chunk( $pictures->result(), 9 ); // split the long array into a multidimensional array with 9 objects in each

<?php foreach( $picture_chunks as $chunk ): ?> // loop through the outer array creating the <div><ul></ul></div>
<div class="item">
    <ul>
    <?php foreach( $chunk as $p ): ?> //loop through the inner array creating the LIs
        <li><a href="images/gallery/<?=$p->category;?>/<?=$p->photo_name;?>" rel="example1" ><img src="images/gallery/<?=$p->category;?>/thumb_<?=$p->photo_name;?>" alt="#" /></a></li>
    <?php endforeach; ?>
    </ul>
</div>
<?php endforeach; ?>

答案 1 :(得分:0)

如果你需要让它在每九个项目上开始一个新的div,你需要使用模数。

下面是完全未经测试的,肯定是错误的,但想法是每当你的$ p被9整除时,你就可以做一些特殊的事情,比如关闭并打开一个新的div。

for($i=0;$i<10;$i++)
{
  if($i % 9)
  {
   <li><a href="images/gallery/<?=$p->category;?>/<?=$p->photo_name;?>" rel="example1" ><img src="images/gallery/<?=$p->category;?>/thumb_<?=$p->photo_name;?>" alt="#" /></a></li>
   echo '</div>;
   echo '<div>';
  }else{
    <li><a href="images/gallery/<?=$p->category;?>/<?=$p->photo_name;?>" rel="example1" ><img src="images/gallery/<?=$p->category;?>/thumb_<?=$p->photo_name;?>" alt="#" /></a></li>
  }
}

答案 2 :(得分:0)

我认为你可能过于复杂。尝试以下。我没有添加您的图库变量,因为我无法测试它们,但它应该按照您的需要工作。

        <div class="item"> <ul>
<?php
    foreach(range(1,100) as $item){
        if($item%9 == 0){
?></ul></div>
        <div class="item"> <ul>
<?php   } ?>
    <li> insert gallery output here <?php echo $item ?></li>
<?php   
    }

?>          
</ul></div>