sorting multidimensionnel tableau php par plusieurs champs avec valeur

J'ai le tableau suivant:

Array ( [3698] => Array ( [brand] => Brand 1 [rate] => 198 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) [1805] => Array ( [brand] => Brand 2 [rate] => 200,6 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) [1801] => Array ( [brand] => Brand 3 [rate] => 202,5 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) [1810] => Array ( [brand] => Brand 1 [rate] => 172 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) ) 

Et je veux qu'il soit sortingé d'abord par Brand et ensuite par Rate, comme ceci:

 Array ( [3698] => Array ( [brand] => Brand 1 [rate] => 172 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) [1810] => Array ( [brand] => Brand 1 [rate] => 198 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) [1805] => Array ( [brand] => Brand 2 [rate] => 202,5 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) [1801] => Array ( [brand] => Brand 1 [rate] => 172 [availability] => 0 [stopsales] => 0 [conditions] => 1 [currencycode] => 1 ) ) 

Je l'ai déjà sortingé par «marque», mais il le fait par ordre alphabétique, ce qui n'est pas exactement ce dont j'ai besoin. La façon dont la "marque" doit sortinger est la suivante:

Si je suis dans le site Web de Brand 2, il devrait apparaître d'abord, si je suis dans Brand 3, il devrait apparaître d'abord et ainsi de suite.

Actuellement, j'utilise cet uasort avec la fonction suivante:

 function sortByBrandName($a, $b) { //global $hotelBrand; $brandName = strcmp($a['brand'], $b['brand']); if($brandName === 0) { return $brandName; } return $brandName; } 

Et bien qu'il sortinger le tableau par Brand, il ne fait pas l'affaire en fonction du site sur lequel je suis actuellement

Merci d'avance pour votre aide!

Si vous avez besoin d'une aiguille (ou d'une valeur) pour comparer (importer) à l'intérieur de votre uasort , utilisez simplement le mot-key d' use avec votre fonction anonyme avec celui-ci. Donc, dans votre cas, vous pouvez utiliser le nom de marque avec le sorting.

Exemple simple:

 $hotelBrand = 'Brand 3'; uasort($data, function ($a, $b) use ($hotelBrand) { $a1 = levenshtein($hotelBrand, $a['brand']); $b1 = levenshtein($hotelBrand, $b['brand']); if ($a1 === $b1) { // if same name sort by rate return $a['rate'] > $b['rate'] ? 1 : -1; } else if ($a1 != $b1) { return $a1 > $b1 ? 1 : -1; } return 0; }); 

Exemple de sortie

 array_multisort(array_column($data, 'brand'), SORT_ASC, array_column($data, 'rate'), SORT_ASC, $data); 

Pour reference: http://php.net/array_multisort