Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Is it possible to use usort to sort multiple fields in a multidimensional array? For example, I want to sort name alphabetically and then from those records I want to sort them by age. Is this possible using sort?

Array ( 
    [0] => Array ( 
        [name] => Jonah 
        [age] => 27 
    )
    [1] => Array (
        [name] => Bianca 
        [age] => 32 
    )
)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
407 views
Welcome To Ask or Share your Answers For Others

1 Answer

How about:

$arr = Array (
    0 => Array (
        'name' => 'Jonah',
        'age' => '27',
    ),
    1 => Array (
        'name' => 'Bianca',
        'age' => '32',
    ),
    2 => Array (
        'name' => 'Jonah',
        'age' => '25',
    ),
    3 => Array (
        'name' => 'Bianca',
        'age' => '35',
    ),
);
function comp($a, $b) {
    if ($a['name'] == $b['name']) {
        return $a['age'] - $b['age'];
    }
    return strcmp($a['name'], $b['name']);
}

usort($arr, 'comp');
print_r($arr);

output:

Array
(
    [0] => Array
        (
            [name] => Bianca
            [age] => 32
        )

    [1] => Array
        (
            [name] => Bianca
            [age] => 35
        )

    [2] => Array
        (
            [name] => Jonah
            [age] => 25
        )

    [3] => Array
        (
            [name] => Jonah
            [age] => 27
        )

)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...