Example #1
0
<?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);