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

Sorting time array giving wrong values in PHP

我有一个这样的PHP数组:

1
2
3
4
5
6
7
8
array(3) {
     [0]=>
      string(4)"9:30"
     [1]=>
      string(5)"15:00"
     [2]=>
      string(5)"13:00"
}

这次排序之后,我得到了错误的数据。我用array_multisort函数对它进行排序。

这是我在整理时间之后得到的

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

这是我的密码

首先,我使用strtotime函数将时间转换为unix时间,然后按如下方式排序:

1
2
3
4
5
6
7
8
9
while($row11 = mysqli_fetch_array($hourget))
  {
      $totlahourdat1[] = strtotime($row11['hours']);
      $totlahourdat2[] = $row11['hours'];
  }

  echo"[cc lang="php"]";
    var_dump($totlahourdat2);
  echo"

;/排序数据数组_multisort($totlahourdat1,sort_desc);//Var_转储($totlahourdat);foreach($totlahourdat1为$time){$totlahourdat[]=日期("h:i",$time);}echo"

1
2
3
";
  var_dump($totlahourdat);
echo"

";< /代码>

如果我打印我的$totlahourdat1数组,那么我得到:

1
2
3
4
5
6
7
8
array(3) {
   [0]=>
    int(1500535800)
   [1]=>
    int(1500555600)
   [2]=>
    int(1500548400)
 }

我的结果应该是:

1
2
3
4
5
6
7
8
array(3) {
  [0]=>
    string(4)"9:30"
  [1]=>
    string(5)"13:00"
  [2]=>
    string(5)"15:00"
}

任何帮助都将不胜感激。


简单如下:

1
2
3
4
5
6
7
8
$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


使用natsort($array)见函数定义


你的问题比你想象的要简单得多。你只是忘了用正确的顺序

ASC订购

1
array_multisort($totlahourdat1, SORT_ASC);

请参阅此处的演示(https://eval.in/835356)


可以使用usort()编写自定义排序函数。

1
2
3
4
5
6
7
8
9
10
$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,那么您可以使用宇宙飞船操作员来大大减小排序功能的大小。

1
2
3
4
5
$times = array("9:30","15:00","13:00");

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