<?php ini_set('display_errors', 1); error_reporting(E_ALL); $arrayNumbers = ['a' => -1, 'b' => 1, 'c' => -1, 'd' => -1, 'e' => 1, 'f' => 1, 'g' => -1]; $arrayAlphabet = ['d' => 'd', 'a' => 'a', 'b' => 'b', 'g' => 'g', 'c' => 'c', 'e' => 'e', 'f' => 'f']; function sortByCriteria(&$countries) { usort($countries, function ($a, $b) { $a > $b ? $test = 1 : ($test = -1); return $test; }); } sortByCriteria($arrayAlphabet); var_dump($arrayAlphabet); //////////// //$test = strcasecmp("A", "B"); //echo $test;
function setPriorityFlags(array $countries) { $array = $countries; foreach ($array as &$country) { $country['name'] === 'USA' ? $country['is_usa'] = 0 : ($country['is_usa'] = 1); $country['lang'] === 'en' ? $country['is_en'] = 0 : ($country['is_en'] = 1); } return $array; } /** * @param array $countriesIn * @param $criteria * @return array */ function sortByCriteria(array $countriesIn, $criteria) { $countries = $countriesIn; usort($countries, function ($a, $b) use($criteria) { for ($i = 0; $i < count($criteria); $i++) { if ($a[$criteria[$i]] == $b[$criteria[$i]]) { continue; } return $a[$criteria[$i]] > $b[$criteria[$i]] ? 1 : -1; } return 0; }); return $countries; } $countriesWithFlags = setPriorityFlags($countries); $countriesSorted = sortByCriteria($countriesWithFlags, ['is_usa', 'is_en', 'position', 'name']); var_dump($countriesSorted);