<?php
function createMultiKeyCmpFunc($cmp, $key /* , keys... */) {
$keys = func_get_args();
array_shift($keys);
return function (array $a, array $b) use ($cmp, $keys) {
return array_reduce($keys, function ($result, $key) use ($cmp, $a, $b) {
return $result ?: call_user_func($cmp, $a[$key], $b[$key]);
});
};
}
$array = [
['foo' => 4, 'bar' => 2, 'baz' => 3],
['foo' => 4, 'bar' => 3, 'baz' => 3],
['foo' => 3, 'bar' => 2, 'baz' => 3],
['foo' => 4, 'bar' => 1, 'baz' => 6],
['foo' => 3, 'bar' => 2, 'baz' => 3],
['foo' => 1, 'bar' => 4, 'baz' => 3],
['foo' => 2, 'bar' => 2, 'baz' => 1],
['foo' => 6, 'bar' => 6, 'baz' => 8],
['foo' => 6, 'bar' => 2, 'baz' => 3],
['foo' => 3, 'bar' => 1, 'baz' => 5],
['foo' => 4, 'bar' => 2, 'baz' => 3],
];
usort($array, createMultiKeyCmpFunc('strcmp', 'foo', 'bar', 'baz'));
var_dump($array);
preferences:
42.28 ms | 402 KiB | 5 Q