Please use this below function:
function sortArrayByTwoKeys($data, $k1, $k2, $order='ASC'){
if($order == 'DESC'){
usort($data, function (array $a, array $b) {
return [$b['score'], $b['name']] <=> [$a['score'], $a['name']];
});
} elseif($order == 'ASC_K2_DESC_K1'){
usort($data, function (array $a, array $b) {
return [$b['score'], $a['name']] <=> [$a['score'], $b['name']];
});
} elseif($order == 'ASC_K1_DESC_K2'){
usort($data, function (array $a, array $b) {
return [$a['score'], $b['name']] <=> [$b['score'], $a['name']];
});
} else {//ASC
usort($data, function (array $a, array $b) {
return [$a['score'], $a['name']] <=> [$b['score'], $b['name']];
});
}
return $data;
}
//Example 1
$data = [
['id' => 111, 'score' => 5, 'name' => 'xyz'],
['id' => 222, 'score' => 3, 'name' => 'ddd'],
['id' => 333, 'score' => 2, 'name' => 'xyz'],
['id' => 444, 'score' => 3, 'name' => 'fff'],
['id' => 555, 'score' => 5, 'name' => 'acb'],
['id' => 666, 'score' => 6, 'name' => 'ttt'],
['id' => 777, 'score' => 6, 'name' => 'sss'],
['id' => 888, 'score' => 6, 'name' => 'aaa']
];
$data = sortArrayByTwoKeys($data, 'score', 'name', 'ASC_K2_DESC_K1');
echo '<pre>';print_r($data);echo '</pre>';
Output will be:
Array
(
[0] => Array
(
[id] => 888
[score] => 6
[name] => aaa
)
[1] => Array
(
[id] => 777
[score] => 6
[name] => sss
)
[2] => Array
(
[id] => 666
[score] => 6
[name] => ttt
)
[3] => Array
(
[id] => 555
[score] => 5
[name] => acb
)
[4] => Array
(
[id] => 111
[score] => 5
[name] => xyz
)
[5] => Array
(
[id] => 222
[score] => 3
[name] => ddd
)
[6] => Array
(
[id] => 444
[score] => 3
[name] => fff
)
[7] => Array
(
[id] => 333
[score] => 2
[name] => xyz
)
)