Skip to content
Advertisement

Sorting a multi-dimensional array based on a consistent array key in PHP

I am trying to sort a multidimensional array value based on a consistent key. My array looks something similar to this and the key I want to sort values in order by is discipline_one.

$data = [
    [
        'id' => 1,
        'score' => 200,
        'results' => [
            'discipline_one' => "4:01"
        ],
    ],
    [
        'id' => 2,
        'score' => 250,
        'results' => [
            'discipline_one' => "3:50"
        ],
    ],
    [
        'id' => 3,
        'score' => 284,
        'results' => [
            'discipline_one' => "3:42"
        ],
    ],
    [
        'id' => 4,
        'score' => 300,
        'results' => [
            'discipline_one' => "4:27"
        ],
    ],
];

Going off the id key in the above example, my expected output would be in the order:

3, 2, 1, 4

Previously, to query based on score I used:

array_multisort(array_column($data, 'score'), SORT_DESC, $data);

However, if I add an additional array_column on this for the discipline_one consistent key then I get:

array_multisort(array_column(array_column($data, 'result'), 'discipline_one'), SORT_DESC, $data);

array_multisort(): Array sizes are inconsistent

The third argument expects the same array which in this case is not possible. Does any one know a way I can achieve this?

Advertisement

Answer

Why not using simple usort?

usort($data, fn($a, $b) => ($a['results']['discipline_one'] <=> $b['results']['discipline_one']) * -1);
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement