首页 > 解决方案 > 任何人都知道我如何通过“创建”对这个数组进行排序?

问题描述

我正在寻找一种通过键“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);

标签: phpsortingmultidimensional-array

解决方案


如果您将字符串日期转换为时间戳,那么您应该能够将 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');

在这里,我们只是将字符串日期转换为临时变量中的时间戳。这样我们就不必覆盖我们的字符串日期。

这是你要找的吗?


推荐阅读