简单的PHP数组按子数组键排序

时间:2016-07-25 02:56:39

标签: php sorting usort

尝试使用“结束”对下面的数组进行排序而不使用usort函数,是否有一种简单的方法可以这样做?

$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函数可以解决这个问题,但我并不是在编码方面取得进展。是否有一种通过“结束”完成排序的简单方法,或者我是否需要进行排序。如果需要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在上面的foreachloop里面。

1 个答案:

答案 0 :(得分:1)

由于end值是时间戳,只需将它们提取到数组中并对其进行排序,对原始数组进行排序:

PHP&lt; 5.5.0

array_multisort(
    array_map(function($v) { return $v['end']; }, $feature_event), $feature_event);

PHP&gt; = 5.5.0

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

或者使用SORT_DESC作为第三个参数,具体取决于您要排序的方式。

然后使用您的array_slice()获取第一个或最后一个3并循环播放。