需要帮助在PHP中使用时间戳排序数组


Need Help Sorting Array with Timestamp in PHP

在发布这篇文章之前,我已经做了相当多的研究,现在我需要朝着正确的方向伸出援手。我有一个ip摄像机文件名列表。文件名本身就是我需要排序的时间戳。我不知道如何对字符串名称上的日期进行排序。我想我需要将字符串转换为函数strtotime()的可读格式?或者有没有办法不改变字符串?我不知道如何正确处理这个问题。

我试过array_multisort($array, SORT_DESC, SORT_NUMERIC);,但没有成功。

$array = Array ( 'SNAP_CH04_2016_05_15_18_11_05_62777.jpg', 'SNAP_CH01_2016_05_15_18_05_38_63588.jpg', 'SNAP_CH02_2016_05_15_18_05_13_38387.jpg', 'SNAP_CH04_2016_05_15_15_55_28_52502.jpg',  'SNAP_CH04_2016_05_15_14_52_46_26039.jpg',  'SNAP_CH03_2016_05_15_14_52_39_18421.jpg',  'SNAP_CH04_2016_05_15_14_51_34_19005.jpg', 'SNAP_CH02_2016_05_15_14_51_25_9874.jpg', 'SNAP_CH04_2016_05_15_06_12_49_23707.jpg', 'SNAP_CH04_2016_05_15_05_03_09_38176.jpg',  'SNAP_CH04_2016_05_15_03_33_27_29791.jpg', 'SNAP_CH03_2016_05_15_01_59_29_27941.jpg' );

欢迎提出任何建议。努力学习。

您可以使用usort函数来定义一个自定义函数来比较字符串。以下是它的工作原理:

<?php
function timestamp_cmp($a, $b) {
    $first = substr($a, 10);
    $second = substr($b, 10);
    return strnatcmp($first, $second);
} 
$array = Array ( 
    'SNAP_CH04_2016_05_15_18_11_05_62777.jpg', 
    'SNAP_CH01_2016_05_15_18_05_38_63588.jpg', 
    'SNAP_CH02_2016_05_15_18_05_13_38387.jpg', 
    'SNAP_CH04_2016_05_15_15_55_28_52502.jpg',  
    'SNAP_CH04_2016_05_15_14_52_46_26039.jpg',  
    'SNAP_CH03_2016_05_15_14_52_39_18421.jpg',  
    'SNAP_CH04_2016_05_15_14_51_34_19005.jpg', 
    'SNAP_CH02_2016_05_15_14_51_25_9874.jpg', 
    'SNAP_CH04_2016_05_15_06_12_49_23707.jpg', 
    'SNAP_CH04_2016_05_15_05_03_09_38176.jpg',  
    'SNAP_CH04_2016_05_15_03_33_27_29791.jpg', 
    'SNAP_CH03_2016_05_15_01_59_29_27941.jpg' 
);
usort($array,'timestamp_cmp');

注意:如果你使用的是PHP 5.3+,你可以这样做:

usort($array,function($a, $b) {
    $first = substr($a, 10);
    $second = substr($b, 10);
    return strnatcmp($first, $second);
});

只要您能够对名称中包含的"SNAP_CH_04"部分进行排序,就可以使用sort()对数组进行排序,而无需进行任何转换。

sort($array);

如果你需要去掉那个部分,你可以使用substr,然后使用sort(),就像这样:

for ($a = 0; $a < count($array); $a++)
{
    $array[$a] = substr($array,10);
}
sort($array);