简单 PHP 数组按子数组键排序
Simple PHP Array Sorting by sub array key
尝试在不使用 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 函数可以解决问题,但我在编码方面并没有那么先进。有没有一种简单的方法可以通过 "end" 完成排序,或者我需要做一个 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在上面的foreach循环里面。
由于 end
值是时间戳,只需将它们提取到一个数组中并对其进行排序,对原始数组进行排序:
PHP < 5.5.0:
array_multisort(
array_map(function($v) { return $v['end']; }, $feature_event), $feature_event);
PHP >= 5.5.0:
array_multisort(array_column($feature_event, 'end'), $feature_event);
或使用SORT_DESC
作为第三个参数,具体取决于您要排序的方式。
然后使用你的 array_slice()
获取第一个或最后一个 3 并循环。
尝试在不使用 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 函数可以解决问题,但我在编码方面并没有那么先进。有没有一种简单的方法可以通过 "end" 完成排序,或者我需要做一个 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在上面的foreach循环里面。
由于 end
值是时间戳,只需将它们提取到一个数组中并对其进行排序,对原始数组进行排序:
PHP < 5.5.0:
array_multisort(
array_map(function($v) { return $v['end']; }, $feature_event), $feature_event);
PHP >= 5.5.0:
array_multisort(array_column($feature_event, 'end'), $feature_event);
或使用SORT_DESC
作为第三个参数,具体取决于您要排序的方式。
然后使用你的 array_slice()
获取第一个或最后一个 3 并循环。