嗨哥们:)我需要重新排序一个包含给定格式的几个项目的数组。例如,像这样:
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吗?感谢。
答案 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);