有没有一种简单的方法可以在php foreach循环中一次执行4个

时间:2011-08-14 19:04:29

标签: php foreach

我有这个php foreach循环

<?php $all_news = $this->db->query("Select * from news"); ?>
<div class="inner">             
foreach($all_news as $key=>$news){?>
  <div class="news <?php echo ($key%2==1)? 'odd': 'even'?>">
  <div class="news_img">....<?php echo $news['title'] ?>

但问题是$ all_news可能有20个结果左右但设计只允许我在每个内部div中放置4个新闻块...有没有办法让这种情况发生所以我只有4个新闻div每个内部div

4 个答案:

答案 0 :(得分:6)

<?php 

$all_news = $this->db->query("Select * from news"); 

echo '<div class="inner">';

$c = count($all_news);
for($i = 0; $i < $c; $i++){
    <div class="news <?php echo ($i%2==1)? 'odd': 'even'?>">
    <div class="news_img">....<?php echo $news['title'] ?>
    if($i % 4 == 3)
        echo '</div><div class="inner">';
}

echo '</div>';

?>

答案 1 :(得分:4)

将您的查询更改为仅返回4行:

SELECT * FROM news LIMIT 4

或者你可以改变你的for循环。

for($i = 0; $i < min(4, count($all_news)); $i++)
{?>
  <div class="news <?php echo ($i%2==1)? 'odd': 'even'?>">
  <div class="news_img">....<?php echo $all_news[$i]['title'];

<?}

<击>

[编辑]

看看你现在的意思。创建两个循环:

<?
$index = 0;
while ($index < count($all_news))
{
  $news = $all_news[$index];

  ?>Start outer div<?

  for ($item = 0; $item < 5; $item++)
  {
    ?>Inner div with news item <? echo $news['title'];
  }

  ?>End outer div<?
  $index++;
}

答案 2 :(得分:1)

您可以使用两个for循环:

<?php $all_news = $this->db->query("Select * from news"); ?>
<?php for($i = 0, $l = count($all_news); $i < $l; $i+=4): ?>
    <div class="inner">
    <?php for($j = $i; $j < $i+4; $j++): ?>
        <div class="news <?php echo ($j%2==1)? 'odd': 'even'?>">
        <div class="news_img">....<?php echo $all_news[$j]['title'] ?>
    <?php endfor;?>
    </div>
<?php endfor;?>

另一种选择是array_chunk [docs]

答案 3 :(得分:1)

最懒的方法就是检查你是否已经在当前的div中做了四次。如果有,请关闭当前div并开始一个新的:

<div class="inner">
<?php
foreach ($all_news as $key => $news) {
    if ($key % 2) {
        $oddEven = 'odd';
    } else {
        $oddEven = 'even';
        if ($key && $key % 4 === 0) {
            echo '</div><div class="inner">';
        }
    }

    echo "<div class=\"news $oddEven\">";
    // ...
}
?>
</div>

请注意,这假定$all_news0处有一个元素,因此它确保它不会关闭第一个空div。