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

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

如果按“用户名”排序 => => 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吗?

4

3 回答 3

2

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

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

usort($arr, sortByUsername);
于 2013-07-24T18:36:16.517 回答
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);
于 2013-07-24T18:42:54.033 回答
0

您可以使用array_multisort

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

array_multisort($names,SORT_STRING,$arr);
print_r($arr);
于 2013-07-24T18:39:33.473 回答