根据表示php时间的子字符串重新排序数组项

时间:2016-10-02 19:49:51

标签: php arrays time

嗨哥们:)我需要重新排序一个包含给定格式的几个项目的数组。例如,像这样:

M = 11:00_12:00,d = 10:00_10:30,= 13:00_13:30

正如我们所看到的,任何项目的给定格式都是一个字符串,如 x = whateverinitialhour_whateverfinalhour

如前所述,我必须根据初始时间重新排序这些项目,因此预期结果应为:

d = 10:00_10:30,M = 11:00_12:00,A = 13:00_13:30

好吧,我一直在搜索 usort ,我发现类似的问题也像How to sort multidimensional PHP array (recent news time based implementation)

所以,我正在编码:

$arr = array();
$newarr = array();
$arr = ('m=11:00_12:00','d=10:00_10:30','a=13:00_13:30');
usort($arr, function($a,$b) {return strtotime(substr($a[0],2,5))-strtotime(substr($b[0],2,5));});
foreach ($arr as $value) {
    $newarr[] = $value;
}

不幸的是,我没有得到预期的结果,新数组包含这个:

M = 11:00_12:00,A = 13:00_13:30,d = 10:00_10:30

每个项目的初始时间不会重新排序:(

我做错了什么?我不是以严格的方式使用usort吗?感谢。

1 个答案:

答案 0 :(得分:1)

查看您的usort()功能

usort($arr, function($a,$b) {
    return strtotime(substr($a[0],2,5))-strtotime(substr($b[0],2,5));
                            ^^^^^                        ^^^^^
});

$a$b不是数组,它们是数组的元素。此外,您不需要新数组来存储已排序的数组,usort()将操作应用于原始数组本身。所以你的代码应该是这样的:

$arr = array('m=11:00_12:00','d=10:00_10:30','a=13:00_13:30');
usort($arr, function($a,$b){ 
    return (strtotime(substr($a,2,5)) < strtotime(substr($b,2,5))) ? -1 : 1; 
});

var_dump($arr);