排序时间数组在PHP中给出错误的值

时间:2017-07-20 17:18:39

标签: php arrays sorting datetime time

我有一个像这样的php数组: -

([key, value] /*: [string, string] */) =>

这次排序后我得到错误的数据。我按array(3) { [0]=> string(4) "9:30" [1]=> string(5) "15:00" [2]=> string(5) "13:00" } 函数对其进行排序。

这是我在分拣时间后得到的

array_multisort

这是我的代码

首先我通过使用strtotime函数将时间转换为unix时间,然后像这样排序:

array(3) {
   [0]=>
     string(5) "03:00"
   [1]=>
     string(5) "01:00"
   [2]=>
     string(5) "09:30"
 }

如果我打印我的while($row11 = mysqli_fetch_array($hourget)) { $totlahourdat1[] = strtotime($row11['hours']); $totlahourdat2[] = $row11['hours']; } echo "<pre>"; var_dump($totlahourdat2); echo "</pre>"; //sort data array_multisort($totlahourdat1, SORT_DESC); //var_dump($totlahourdat); foreach($totlahourdat1 as $time){ $totlahourdat[] = date("h:i",$time); } echo "<pre>"; var_dump($totlahourdat); echo "</pre>"; 数组,那么我得到这个:

$totlahourdat1

我的结果应该是:

array(3) {
   [0]=>
    int(1500535800)
   [1]=>
    int(1500555600)
   [2]=>
    int(1500548400)
 }

任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:3)

使用natsort($array) see function definition

答案 1 :(得分:3)

如下所示: -

$time = array(0=>"9:30",1=>"15:00",2=>"13:00");
function timecompare($a,$b)
{
    return strtotime($a) < strtotime($b) ? -1: 1;
}
uasort($time ,'timecompare');

print_r(array_values($time));

输出: - https://eval.in/835353

答案 2 :(得分:1)

您可以使用usort()编写自定义排序功能。

$times = array("9:30", "15:00", "13:00");

usort($times, function ($a, $b) {
    $a = strtotime($a);
    $b = strtotime($b);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? 1 : -1;
});

如果您使用的是PHP7,则可以使用spaceship operator来大大减少排序功能的大小。

$times = array("9:30", "15:00", "13:00");

usort($times, function ($a, $b) {
    return strtotime($b) <=> strtotime($a);
});

答案 3 :(得分:1)

你的问题比你想象的要简单得多。你忘了使用正确的订单

ASC

排序
array_multisort($totlahourdat1, SORT_ASC);

在此处查看演示(https://eval.in/835356