Sorting an associative array
Glossary overview

Sorting an associative array

Фабула

Есть массив:

$users = [
    ['name' => 'Alice', 'age' => 30, 'score' => 85],
    ['name' => 'Bob', 'age' => 25, 'score' => 95],
    ['name' => 'Charlie', 'age' => 35, 'score' => 70],
    ['name' => 'David', 'age' => 28, 'score' => 90],
];

Твоя задача:

  1. Отсортировать массив по полю age по возрастанию.
  2. Отсортировать массив по полю score по убыванию.
  3. Сделать это через отдельные функции, наприм

Решение

<?php

$users = [
    ['name' => 'Alice', 'age' => 30, 'score' => 85],
    ['name' => 'Bob', 'age' => 25, 'score' => 95],
    ['name' => 'Charlie', 'age' => 35, 'score' => 70],
    ['name' => 'David', 'age' => 28, 'score' => 90],
];

function sortByAgeAsc(array $users) {
	usort($users, function($a, $b) {
    return $a['age'] <=> $b['age']; // по возрастанию
});

return $users;
}

print_r(sortByAgeAsc($users));

// Вывод
Array
(
    [0] => Array
        (
            [name] => Bob
            [age] => 25
            [score] => 95
        )

    [1] => Array
        (
            [name] => David
            [age] => 28
            [score] => 90
        )

    [2] => Array
        (
            [name] => Alice
            [age] => 30
            [score] => 85
        )

    [3] => Array
        (
            [name] => Charlie
            [age] => 35
            [score] => 70
        )

)

По убыванию (просто поменяли a и b местами – return $b[‘score’] <=> $a[‘score’]):

function sortByScoreDesc(array $users) {
    usort($users, function($a, $b) {
        return $b['score'] <=> $a['score']; // по убыванию
    });

    return $users;
}


print_r(sortByScoreDesc($users));

// Вывод
Array
(
    [0] => Array
        (
            [name] => Bob
            [age] => 25
            [score] => 95
        )

    [1] => Array
        (
            [name] => David
            [age] => 28
            [score] => 90
        )

    [2] => Array
        (
            [name] => Alice
            [age] => 30
            [score] => 85
        )

    [3] => Array
        (
            [name] => Charlie
            [age] => 35
            [score] => 70
        )

)