对于每个循环输出仅1个结果;尝试在数组中输出3结果然后停止循环

时间:2016-07-29 22:38:05

标签: php foreach

我的foreach循环仅输出1个结果。我想要做的是从foreach循环输出3个结果然后基本上打破/停止循环。

  <?php $i=0; foreach($feature_event as $event): $i++ ?>
       <?php if($event["end"] >= $now && $i==3): ?>
                ... CODE HERE ...
       <?php endif; ?>
  <?php endforeach;?>

更新 数组和现在的变量

<?php 
$now = strtotime("now");

$feature_event = array(

    array(
        "title"     => "Cincinnati Music Festival",
        "date"      => "July 22-24, 2016",
        "end"       => strtotime("July 24, 2016"),

    ),
    array(
        "title"     => "Essence Festival",
        "date"      => "June 30 - July 2, 2017",
        "end"       => strtotime("July 2, 2017"),

    ),
    array(
        "title"     => "Magic City Classic",
        "date"      => "October 28 - 30 2016",
        "end"       => strtotime("October 30, 2016"),

    ),
    array(
        "title"     => "NBA All-Star Weekend",
        "date"      => "February 17-19, 2017",
        "end"       => strtotime("February 19, 2017"),

    ),
    array(
        "title"     => "Party Gras Cruise",
        "date"      => "August 18-20, 2016",
        "end"       => strtotime("August 20, 2016"),
    )

    array_multisort(array_column($feature_event, 'end'), $feature_event);
    ?>

忘记添加阵列多重排名

5 个答案:

答案 0 :(得分:0)

更改此行

<?php if($event["end"] >= $now && $i==3): ?>

<?php if($event["end"] >= $now): if ($i == 3) break; ?>

答案 1 :(得分:0)

此代码将回显仍在将来的前三个事件。

$i = 0;

foreach ($feature_event as $event) {
    if ($i == 3) break;

    if ($event['end'] >= $now) {
        $i++;
        echo $event['title'] . '<br>';
        // ...
    }
}

答案 2 :(得分:0)

使用if($event["end"] >= $now && $i==3)编写它的方式只会在$i==3时输出,而这只会在循环的一次迭代中发生。

我建议:在数组的前三个项目的一个切片上循环(在排序之后)。这样,您最多可以获得三个事件。

foreach (array_slice($feature_event, 0, 3) as $event) {
    if ($event["end"] >= $now) break;
    // your other code
}

您可以在日期比较条件中打破循环,但如果您真的要与strtotime("now")进行比较,请记住,您只会获得过去的事件。我认为这是你想要的,但只是想重申一下,因为根据你提供的样本,即使使用这个代码,也只会输出一个项目,因为这些项目中只有一个与日期条件匹配。

答案 3 :(得分:0)

这将使您的代码输出3条记录(当然,if $event["end"] >= $now对于至少3条记录是正确的)但您应该寻找更好的解决方案。

<?php $i=0; foreach($feature_event as $event): ?>
       <?php if(($event["end"] >= $now) && ($i<3)): ?>
                ... CODE HERE ...
       <?php endif; ?>

  <?php $i++; endforeach;?>

如果$ feature_event是数据库查询的集合,请添加where和limit子句。

$query = "SELECT col1, col2, col3 FROM `events` WHERE 'end' > CURDATE() LIMIT 3"

这样您就不需要在迭代中使用额外的$i计数器了。

或者,如果您希望坚持使用结果集,只需使用for循环。

<?php for($i=0; $i<3; $++); ?>
  <?php if($event["end"] >= $now ): ?>
    <p><?= $featured_event[i]['some_index'] ?></p>
  <?php endif; ?>
<?endfor; ?>

答案 4 :(得分:0)

这似乎得到了我正在寻找的结果......

<?php $i=0; foreach($feature_event as $event): if ($i == 3) break; ?>
     <?php if($event["end"] > $now): $i++;  ?>
                <div class="event box-fade hvr-float">
                    <a href="<?php echo $event["link"]; ?>" title="<?php echo $event["title"]; ?>">
                        <img src="<?php echo $event["img"]; ?>" />
                    </a>
                    <h4><?php echo $event["title"]; ?></h4>
                    <p><i class="fa fa-calendar"></i> <?php echo $event["date"]; ?></p>
                    <p><a class="learnmore" href="<?php echo $event["link"]; ?>" title="Learn more about <?php echo $event["title"]; ?>">Learn More</a></p>
                </div>
     <?php  endif; ?>
<?php endforeach;?>