按值排序多维数组未正确排序

时间:2016-03-31 15:50:53

标签: php sorting multidimensional-array

我试图按日期ASC对多维数组进行排序,但我遇到麻烦...所以我想问你们男女孩为什么会这样?

我的代码是(运行于:Codepad example):

$data = array (
          array (
            'date' => '2016-03-11 12:10:17',
            'type' => '1'
          ),
          array (
            'date' => '2016-03-12 07:16:25',
            'type' => '1'
          ),
          array (
            'date' => '2016-03-12 07:18:07',
            'type' => '2'
          ),
          array (
            'date' => '2016-03-09 14:57:42',
            'type' => '2'
          ),
          array (
            'date' => '2016-02-22 10:39:39',
            'type' => '1'
          )
    );
    usort($data, function($a, $b) {
        return $a['date'] - $b['date'];
    });
    echo '<pre>';
    var_dump($data);

问题是排序不好,我的意思是需要从2月到3月,而不是这样做,我找不到原因。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

使用文档中的排序:http://php.net/manual/en/function.usort.php

usort($data, function($a, $b) {
    if ($a['date'] == $b['date']) {
        return 0;
    }
    return ($a['date'] < $b['date']) ? -1 : 1;
});

答案 1 :(得分:1)

您比较字符串,而不是数字,因此您会得到意想不到的结果。

要比较两个字符串,您可以使用strcmp

usort( $data, function( $a, $b ) {
    return strcmp( $a['date'], $b['date'] );
});

strcmp返回&lt;如果第一个arg小于秒,则为0; &GT;如果第一个arg大于第二个则为0,如果它们相等则为0。