【问题标题】:Sort time in array [duplicate]在数组中排序时间[重复]
【发布时间】:2018-05-27 20:08:46
【问题描述】:

我从 API 收到了一些数据,我需要按时对其进行排序 (iStart) 有人知道怎么做吗?这个数组有大约 12 个项目,其中包含如下信息:

{
    "dayOfWeek": "Monday",
    "iDate": "2017-09-25",
    "iStart": "08:30:00",
    "utils": {
        "iStart": "08:30:00",
        "iEnd": "10:00:00",
        "name": "SOME_NAME",
        "Groups": [
            "GROUP_1",
            "GROUP_2",
            "GROUP_3"
        ],
        "Classroom": ["1021"],
        "docents": ["Teacher_1"]
    },
    "id": 11
},
{
    "dayOfWeek": "Monday",
    "iDate": "2017-09-25",
    "iStart": "13:15:00",
    "utils": {
        "iStart": "13:15:00",
        "iEnd": "14:45:00",
        "name": "SOME_NAME",
        "Groups": ["GROUP_1"],
        "Classroom": ["1021"]
    },
    "id": 12
}

【问题讨论】:

  • 它说“我收到了”。更有可能要求使用 javascript 解决方案,因为还有一个标签。

标签: javascript php arrays sorting time


【解决方案1】:

您可以从时间中删除“:”并转换为int,这样:

“08:30:00”->“083000”->83,000

将小于

“16:02:55”->“160255”->160,255

我认为你可以这样使用usort(假设你有json_decode'ed 作为PHP 数组你的json 字符串):

function cmp($a, $b){
  // [...] make sure $a['iStart'] exists with isset()
  $a = (int)str_replace(':', '', $a['iStart']); // convert "08:30:00" to 83,000
  $b = (int)str_replace(':', '', $b['iStart']);
  if ($a == $b) {
      return 0;
  }
  return ($a < $b) ? -1 : 1;
}

usort($yourJsonDecoded, "cmp");

参考usort()http://php.net/manual/fr/function.usort.php

PS:如果您还想考虑日期,请删除“-”:

$a = (int) (str_replace('-', '', $a['iDate']) . str_replace(':', '', $a['iStart']))

这将执行以下操作:“2017-05-21”和“08:30:00”-> 20,170,821,083,000

【讨论】:

    【解决方案2】:

    您可以使用此代码。

    var arr = [{
      "name": "3",
      "iStart": "08:30:00",
    },{
      "name": "5",
      "iStart": "09:30:00",
    },{
      "name": "1",
      "iStart": "07:30:00",
    },{
      "name": "2",
      "iStart": "07:30:03",
    },{
      "name": "4",
      "iStart": "09:12:03",
    }]
    
    arr.sort(function(a,b){
      var c = parseInt( a.iStart.split(':').join('')) ;
      var d = parseInt( b.iStart.split(':').join('')) ;
    
      return c-d;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多