【发布时间】:2016-07-25 02:56:38
【问题描述】:
尝试在不使用 usort 函数的情况下按“end”对下面的数组进行排序,有没有简单的方法?
$feature_event = array(
array(
"title" => "Classic",
"date" => "October 28 - 30 2016",
"end" => strtotime("October 30, 2016")
),
array(
"title" => "Ski Weekend",
"date" => "February 5-8, 2017",
"end" => strtotime("February 8, 2017")
),
array(
"title" => "NBA Weekend",
"date" => "February 17-19, 2017",
"end" => strtotime("February 19, 2017")
),
array(
"title" => "Fiesta",
"date" => "May 26-28, 2017",
"end" => strtotime("May 28, 2017")
)
我通过 foreach 循环输出结果,但希望限制为 3 个结果。
<?php foreach( array_slice($feature_event, 0, 3) as $event): ?>
...
<?php endforeach; ?>
小解释: 我正在尝试显示与事件关联的图像。每个事件都有一个特定的结束日期。一旦结束日期过去,在循环中显示下一个图像......但我希望数组按结束日期排序。我知道一个 usort 函数可以解决问题,但我在编码方面并没有那么先进。有没有一种简单的方法可以通过“结束”完成排序,或者我需要做一个排序。如果需要一个排序,我还需要forloop吗?请原谅我的愚蠢问题。
更新
这个数组多排序解决方案
array_multisort(array_column($feature_event, 'end'), $feature_event);
按我需要的方式排序,但我想根据当前日期输出数据...我似乎无法创建一个正常工作的条件...
在我的 forloop 中,我有这个条件:
<?php
date_default_timezone_set("America/Chicago");
$now = strtotime("now");
?>
<?php if($now <= $event["end"]) :?>
... code ...
<?php endif;?>
但它只输出 2 个事件....关于我做错了什么的任何想法。这个 if 在上面的 foreach 循环中。
【问题讨论】:
-
这是来自数据库吗?为什么不从那里进行限制和排序,没有更多的
array_slice和usort -
这是一个小型网站的静态数据。它是一种基于不涉及使用 usort 的子数组的键在 php 中排序和限制的方法吗?正如我所说,我更喜欢一个简单的解决方案,但如果有更好的选择,那么我不会反对它。
-
已编辑答案,我误读了
strtotime()部分。