php - 任何人都知道我如何通过“创建”对这个数组进行排序?
问题描述
我正在寻找一种通过键“Created”对这个数组进行排序的方法,所以我首先得到最新的记录。任何人都知道如何做到这一点?
我的数组包含大约 2500 条记录并且还在增长,其格式如下:
array(2525) {
[0]=> array(1) {
[0]=> array(11) {
["id"]=> int(0)
["Filename"]=> string(20) "011899988199119725-3"
["Uri_MP4"]=> string(35) "/v4/output/011899988199119725-3.mp4"
["Uri_PNG"]=> string(41) "/v4/output/thumb/011899988199119725-3.png"
["Uri_GIF"]=> string(29) "/gif/011899988199119725-3.gif"
["SizeMP4"]=> string(9) "391.44 KB"
["Created"]=> string(16) "2019-08-07 13:24"
["Width"]=> int(400)
["Height"]=> int(222)
["Duration"]=> string(4) "0:11"
}
}
我试过了:
$keys = array_column($array_, 'Created');
array_multisort($keys, SORT_DESC, $array_);
和
$sortedArray = Arr::sortByKeys($array_, 'Created');
和
function date_sort($a, $b) {
return strtotime($a) - strtotime($b);
}
$test = usort($array_, "date_sort");
print_r($test);
解决方案
如果您将字符串日期转换为时间戳,那么您应该能够将 usort() 与自定义比较函数一起使用。
让我们调用您的单元素数组父级。
foreach( $parent as $elem ) {
$elem['Created'] = strtotime($elem['Created']);
}
现在我们可以编写一个比较函数来比较每个元素
function sort_dates($date1, $date2) {
return $date1 - $date2;
}
然后用 usort() 调用你的比较方法;
usort($parent, 'sort_dates');
上面的方法需要将我们的字符串日期转换为时间戳。让我们看一个更统一的方法,我们可以保留字符串值,但仍然可以通过使用临时变量来获得我们想要的排序:
function sort_dates($date1, $date2) {
$datetime1 = strtotime($date1['Created']);
$datetime2 = strtotime($date2['Created']);
return $datetime1 - $datetime2;
}
usort($parent, 'sort_dates');
在这里,我们只是将字符串日期转换为临时变量中的时间戳。这样我们就不必覆盖我们的字符串日期。
这是你要找的吗?
推荐阅读
- video - 为什么 FFMPEG 支持的编解码器列表中的某些编解码器在括号中显示“编码器:”或“解码器:”?
- python - 重写索引内的部分字符串
- c# - cs5001 错误程序“a.out”不包含适合入口点的静态“main”方法
- javascript - 部分字符串搜索和突出显示 - React Native
- r - 导入 R:具有重复节点的 XML 数据
- pytorch - 使用pytorch DistributedDataParallel进行元学习,排名变化时结果会变化?
- c# - C# 需要帮助将变量放入方法中
- swift - Swift 中的可变 C 字符串
- python - 如何编码具有高基数的分类特征?
- jolt - 在 Jolt 中合并列表时进行空检查