代码之家  ›  专栏  ›  技术社区  ›  Carlos Salazar

如何按属性值对数组排序

  •  2
  • Carlos Salazar  · 技术社区  · 7 年前

    我有一个包含字符串和日期的数组,

    [
        {
            date : '25-05-2018',
            string : 'foo'
        },
        {
            date : '15-01-2017,
            string : 'baz'
        },
        {
            date : '10-07-2018',
            string : 'bar'
        }
    ]
    

    我需要根据日期字段对数组进行排序。有没有一种有效的方法来排序这个数组?

    注意:数组可以有+250行,并且它们不是来自数据库。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Felippe Duarte    7 年前

    使用 usort 排序,解析日期 DateTime

    $json = '[
        {
            "date" : "25-05-2018",
            "string" : "foo"
        },
        {
            "date" : "15-01-2017",
            "string" : "baz"
        },
        {
            "date" : "10-07-2018",
            "string" : "bar"
        }
    ]';
    
    $array = json_decode($json, true);
    
    usort($array, function($a, $b) {
        $a = DateTime::createFromFormat('d-m-Y', $a['date']);
        $b = DateTime::createFromFormat('d-m-Y', $b['date']);
        return $a < $b; //change direction for asc/desc
    });
    var_dump($array);
    

    输出

    array (size=3)
      0 => 
        array (size=2)
        'date' => string '10-07-2018' (length=10)
        'string' => string 'bar' (length=3)
      1 => 
        array (size=2)
        'date' => string '25-05-2018' (length=10)
        'string' => string 'foo' (length=3)
      2 => 
        array (size=2)
        'date' => string '15-01-2017' (length=10)
        'string' => string 'baz' (length=3)