繁体   English   中英

根据表示PHP中时间的子字符串对数组项进行重新排序

[英]Reorder array items depending on substring representing time in php

嗨,伙计们:)我需要对包含若干具有给定格式的项目的数组重新排序。 例如,像这样:

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

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

如前所述,我必须根据开始时间对这些物品进行重新排序,因此预期结果应为:

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

好吧,我已经进行了很多搜索并找到了usort ,我也发现了类似的问题,例如如何对多维PHP数组进行排序(基于最新新闻时间的实现)

所以,我在编码:

$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吗? 谢谢。

看一下您的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM