我的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);
?>
忘记添加阵列多重排名
答案 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;?>