如何按属性值对数组排序

时间:2018-07-12 21:35:33

标签: php arrays sorting

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

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

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

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

1 个答案:

答案 0 :(得分:1)

使用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)