在PHP 7中对关联的数组进行排序

时间:2018-06-02 08:11:00

标签: php sorting

给出以下示例:

$user1 = array('username' => 'test1', 'score' => 2000, 'someotherdata' => 1.0);
$user2 = array('username' => 'test2', 'score' => 4325, 'someotherdata' => 2.0);
$user3 = array('username' => 'test3', 'score' => 624534, 'someotherdata' => 3.0);
$user4 = array('username' => 'test4', 'score' => 564, 'someotherdata' => 1.4);
$user5 = array('username' => 'test5', 'score' => 34256, 'someotherdata' => 1.5);
$user6 = array('username' => 'test6', 'score' => 5476, 'someotherdata' => 1.8);

$arr = array($user1, $user2, $user3, $user4, $user5, $user6);

如何在PHP 7中很好地按字段$arrscore进行排序?我有一个工作的bubblesort我自己做了,但有没有办法使用内置的PHP 7功能很好地完成它,因为bubblesort非常昂贵(我可以自己做一个Quicksort,但在我这样做之前我想知道如果有更好的方法)。

2 个答案:

答案 0 :(得分:2)

您可以使用usort

$user1 = array('username' => 'test1', 'score' => 2000, 'someotherdata' => 1.0);
$user2 = array('username' => 'test2', 'score' => 4325, 'someotherdata' => 2.0);
$user3 = array('username' => 'test3', 'score' => 624534, 'someotherdata' => 3.0);
$user4 = array('username' => 'test4', 'score' => 564, 'someotherdata' => 1.4);
$user5 = array('username' => 'test5', 'score' => 34256, 'someotherdata' => 1.5);
$user6 = array('username' => 'test6', 'score' => 5476, 'someotherdata' => 1.8);

$arr = array($user1, $user2, $user3, $user4, $user5, $user6);

usort($arr, function($a, $b){
    return $a['score'] - $b['score'];
});

echo "<pre>";
print_r( $arr );
echo "</pre>";

这将导致:

Array
(
    [0] => Array
        (
            [username] => test4
            [score] => 564
            [someotherdata] => 1.4
        )

    [1] => Array
        (
            [username] => test1
            [score] => 2000
            [someotherdata] => 1
        )

    [2] => Array
        (
            [username] => test2
            [score] => 4325
            [someotherdata] => 2
        )

    [3] => Array
        (
            [username] => test6
            [score] => 5476
            [someotherdata] => 1.8
        )

    [4] => Array
        (
            [username] => test5
            [score] => 34256
            [someotherdata] => 1.5
        )

    [5] => Array
        (
            [username] => test3
            [score] => 624534
            [someotherdata] => 3
        )

)

Doc:usort()

答案 1 :(得分:1)

使用multisort

$user1 = array('username' => 'test1', 'score' => 2000, 'someotherdata' => 1.0);
$user2 = array('username' => 'test2', 'score' => 4325, 'someotherdata' => 2.0);
$user3 = array('username' => 'test3', 'score' => 624534, 'someotherdata' => 3.0);
$user4 = array('username' => 'test4', 'score' => 564, 'someotherdata' => 1.4);
$user5 = array('username' => 'test5', 'score' => 34256, 'someotherdata' => 1.5);
$user6 = array('username' => 'test6', 'score' => 5476, 'someotherdata' => 1.8);

$arr = array($user1, $user2, $user3, $user4, $user5, $user6);

$score = array();
foreach ($arr as $key => $row)
{
    $score[$key] = $row['score'];
}
array_multisort($score, SORT_DESC, $arr);
echo "<pre>";
print_r($score);
echo "</pre>";