按子值按字母顺序排列多维数组

时间:2013-07-24 18:33:17

标签: php

$arr=array(
    [0]=>array(
        [username]=>bsmith
        [name]=>Bob Smith
    )
    [1]=>array(
        [username]=>mjohnson
        [name]=>Mike Johnson
    )
    [2]=>array(
        [username]=>ameyer
        [name]=>Meyer Adam
    )
)

需要按照数组的特定子值进行自然(按字母顺序排序)。

如果按“username”=>排序=> ameyer,bsmith,mjohnson

$arr=array(
    [0]=>array(
        [username]=>ameyer
        [name]=>Meyer Adam
    )
    [1]=>array(
        [username]=>bsmith
        [name]=>Bob Smith
    )
    [2]=>array(
        [username]=>mjohnson
        [name]=>Mike Johnson
    )

)

如果按“名称”排序=> bsmith,ameyer,mjohnson

$arr=array(
    [0]=>array(
        [username]=>bsmith
        [name]=>Bob Smith
    )
    [1]=>array(
        [username]=>ameyer
        [name]=>Meyer Adam
    )
    [2]=>array(
        [username]=>mjohnson
        [name]=>Mike Johnson
    )
)

最优雅的方法是什么?

我应该使用uasort吗?

3 个答案:

答案 0 :(得分:2)

您需要使用usort,这将是最简单,最快捷的方法。您只需使用strcmp的结果代码即可确定Alpha排序顺序。

function sortByUsername($a, $b) {
  return strcmp($a['username'], $b['username']);
}

usort($arr, sortByUsername);

答案 1 :(得分:2)

$sorter = function($key) {
    return function($data, $data2) use ($key) {
        return strcmp($data[$key], $data2[$key]);
    };
};

usort($arr, $sorter('username'));
var_dump($arr);

usort($arr, $sorter('name'));
var_dump($arr);

答案 2 :(得分:0)

您可以使用array_multisort

foreach ($arr as $array) {
    $names[] = $array['name'];
}

array_multisort($names,SORT_STRING,$arr);
print_r($arr);