Varsayalım ki elinizde sıralaması bozuk bir multidimensional array var ve de siz bunu, öncelik sırasına göre iki ayrı key veya value ile sıralamak istiyorsunuz. Aşağıdaki örnek işte tam bunu yapar.


Kurallar



İşlenmemiş array


$array = [
'Z' => [
'primary' => true,
'age' => 55
],
'C' => [
'primary' => false,
'age' => 60
],
'K' => [
'primary' => true,
'age' => 60
],
'S' => [
'primary' => false,
'age' => 40
],
'F' => [
'primary' => true,
'age' => 60
],
'A' => [
'primary' => true,
'age' => 30
]
];

Hedef


$aim =  [
'F' => [
'primary' => true,
'age' => 60
],
'K' => [
'primary' => true,
'age' => 60
],
'Z' => [
'primary' => true,
'age' => 55
],
'A' => [
'primary' => true,
'age' => 30
],
'C' => [
'primary' => false,
'age' => 60
],
'S' => [
'primary' => false,
'age' => 40
]
];

Fonksiyon


uasort($array, function($a, $b) {
if ($b['primary'] === $a['primary']) {
return $b['age'] > $a['age'];
}

return strcmp($b['primary'], $a['primary']);
});

print_r($array);

Sonuç


(
[F] => Array
(
[primary] => 1
[age] => 60
)

[K] => Array
(
[primary] => 1
[age] => 60
)

[Z] => Array
(
[primary] => 1
[age] => 55
)

[A] => Array
(
[primary] => 1
[age] => 30
)

[C] => Array
(
[primary] =>
[age] => 60
)

[S] => Array
(
[primary] =>
[age] => 40
)
)