Php 有人知道我是如何按“排序”对数组进行排序的吗;创建“;?

Php 有人知道我是如何按“排序”对数组进行排序的吗;创建“;?,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我正在寻找一种方法,通过“Created”键对这个数组进行排序,以便首先获得最新的记录。有人知道怎么做吗 我的数组包含大约2500条记录,并且不断增长,其格式如下: array(2525) { [0]=> array(1) { [0]=> array(11) { ["id"]=> int(0) ["Filename"]=> string(20) "011899988199119725-3"

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


如果将字符串日期转换为时间戳,则应该能够将usort()与自定义比较函数一起使用

让我们调用您的单元素数组父级

foreach( $parent as $elem ) {
    $elem['Created'] = strtotime($elem['Created']);
}
现在我们可以编写一个比较函数来比较每个元素

function sort_dates($date1, $date2) {
    return $date1 - $date2;
}
然后用usort()调用比较方法

上述方法需要将字符串日期转换为时间戳。让我们来看一个更为统一的方法,我们可以通过使用临时变量来保持字符串值,但是仍然得到我们想要的排序:

function sort_dates($date1, $date2) {
    $datetime1 = strtotime($date1['Created']);
    $datetime2 = strtotime($date2['Created']);
    return $datetime1 - $datetime2;
}

usort($parent, 'sort_dates');
这里,我们只是将字符串日期转换为临时变量中的时间戳。这样我们就不必覆盖字符串日期


这就是您想要的吗?

出于某种原因,您显示的示例输出中似乎有一个额外的数组级别。我认为这是你迄今为止尝试过的排序方法不起作用的原因之一

而不是

[
    [row],
    [row],
    [etc.],
]
你有

[
    [[row]],
    [[row]],
    [[etc.]],
]
如果修复生成数组的代码以便删除额外的数组级别,则尝试的
array\u multisort
方法将起作用

usort
方法几乎可以工作;唯一的问题是,您需要在回调中引用已创建的键。(如果需要降序,您还需要执行b-a而不是a-b。)

如果出于某种原因确实需要额外的数组级别,仍然可以在比较函数中说明

function date_sort($a, $b) {
    return strtotime($b[0]['Created']) - strtotime($a[0]['Created']);
}

此阵列来自何处的可能副本?它看起来像数据库中的一行,如果是这样的话,我会在查询中对它进行排序。我尝试了所有的建议,但没有成功。我认为这是因为我的日期和时间是一个字符串?不,如果datetime是一个字符串格式,它应该仍然可以直接排序。数组来自我的脚本,我扫描文件夹中的文件,并在foreach循环中构建数组$Movie=array(数组(“id”=>$id,“Filename”=>$Filename,“Uri_MP4”=>$urimp4,“Uri_PNG”=>$uripng,“Uri_GIF”=>$urigif,“FilePath”=>$FilePath,“SizeMP4”=>$SizeMP4,“Created”=>$Created,“Width”=>$x,“Height”=>$y,“Duration”=>$file['playtime\u string'));谢谢,这很有效D如果你想看到结果,
[
    [row],
    [row],
    [etc.],
]
[
    [[row]],
    [[row]],
    [[etc.]],
]
function date_sort($a, $b) {
    return strtotime($b['Created']) - strtotime($a['Created']);
}
$test = usort($array_, "date_sort");
function date_sort($a, $b) {
    return strtotime($b[0]['Created']) - strtotime($a[0]['Created']);
}