基于键值对Php关联数组进行排序

时间:2014-05-30 06:20:17

标签: php sorting associative-array

好的伙计们, 我有一个php关联数组,格式如下。

groupdata: Array
(
    [0] => Array
        (
            [id] => 3324
            [name] => Testme2
            [creationDate] => 31-MAR-14 04.18.29.618000 PM

        )

    [1] => Array
        (
            [id] => 3325
            [name] => paris
            [creationDate] => 31-MAR-14 06.43.28.291000 PM
        )

    [2] => Array
        (
            [id] => 3236
            [name] => GL_HF
            [creationDate] => 29-MAY-14 12.42.01.444000 PM
        )

    [3] => Array
        (
            [id] => 3251
            [name] => attempting
            [creationDate] => 24-FEB-14 03.47.54.732000 PM
        )

    [4] => Array
        (
            [id] => 3272
            [name] => Testme
            [creationDate] => 03-MAR-14 11.24.58.671000 AM
        )
)

现在我想根据他们的名字对这个数组进行排序。 我怎样才能实现这一目标?

我曾尝试使用kso​​rt / asort方法,但它并没有下降。

所需的数组是:

groupdata: Array
(
 [0] => Array
        (
            [id] => 3251
            [name] => attempting
            [creationDate] => 24-FEB-14 03.47.54.732000 PM
        )
[1] => Array
        (
            [id] => 3236
            [name] => GL_HF
            [creationDate] => 29-MAY-14 12.42.01.444000 PM
        )
[2] => Array
        (
            [id] => 3325
            [name] => paris
            [creationDate] => 31-MAR-14 06.43.28.291000 PM
        )
[3] => Array
        (
            [id] => 3272
            [name] => Testme
            [creationDate] => 03-MAR-14 11.24.58.671000 AM
        )
[4] => Array
        (
            [id] => 3324
            [name] => Testme2
            [creationDate] => 31-MAR-14 04.18.29.618000 PM

        )
)

3 个答案:

答案 0 :(得分:1)

$price = array();
foreach ($groupdata as $key => $row)
{
    $price[$key] = $row['name'];
}
array_multisort($price, SORT_DESC, $groupdata);

了解更多array_multisort()

答案 1 :(得分:0)

使用usort,这样您就可以定义自己的比较元素的方式:

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


usort($your_array, "cmp");

答案 2 :(得分:0)

或者,您可以将usort()strtolower()结合使用。考虑这个例子:

$groupdata = array(array('id' => 3324,'name' => 'Testme2','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3325,'name' => 'paris','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3236,'name' => 'GL_HF','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3251,'name' => 'attempting','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3272,'name' => 'Testme','creationDate' => '31-MAR-14 04.18.29.618000 PM'),);

function sorter($a, $b) {
    if ($a['name'] == $b['name']){
        return 0;
    }
    return strtolower($a['name']) < strtolower($b['name']) ? -1 : 1;
}

usort($groupdata, 'sorter');

Sample Output