F-y-o-d-o-r
12/10/2017 - 1:36 PM

php - sort array function

php - sort array function

usort($price, 'fun_sort'); // пользовательская сортировка
function fun_sort ($a1, $a2) {
   $a11=$a1[2]; // сортируем по индексу массива «2»
   $a22=$a2[2];
   if($a11>$a22) {return 1;}
   else if($a11==$a22) {return 0;}
   else {return -1;}
}

/*****************************/
<?php
//usort($mas, 'func') -  сортировка на основе пользовательской функции (как и в js – получает два элемента, //сравнивает, в результате должно быть return 1, 0 или -1); ОСОРТИРУЕМ ДНИ НЕДЕЛИ НА КИРИЛЛИЦЕ ("Вторник", //"Среда", "Понедельник") (ОБЫЧНАЯ ASCII-СОРТИРОВКА (ПО АЛФАВИТУ) НЕ ГОДИТСЯ ("Вторник", "Понедельник", //"Среда") :
$den = array("Вторник", "Среда", "Понедельник"); // необходимо отсортировать по общепринятому порядку дней недели
//sort($den); // обычная ascii-сортировка (по алфавиту) не годится ("Вторник", "Понедельник", "Среда")
usort($den, 'den_sort'); // сортировка на основе пользовательской функции
foreach ($den as $denn) { // перебор и вывод отсортированного массива
    echo "$denn<br>";
}
function den_sort($a1, $a2)
{ // функция принимает два элемента массива
    $mas_den = array(1 => 'Понедельник', 2 => 'Вторник', 3 => 'Среда',
        4 => 'Четверг', 5 => 'Пятница', 6 => 'Суббота', 7 => 'Воскресенье'); // зададим массив, индексы которого определяют общепринятый порядок следования дней недели
    foreach ($mas_den as $ind => $mas_ind) { // перебор заданного массива и формирование двух переменных, равных индексам (номерам дня недели) для поступивших в функцию элементов
        if ($a1 == $mas_ind) {
            $a1_key = $ind;
        }
        if ($a2 == $mas_ind) {
            $a2_key = $ind;
        }
    }
    if ($a1_key > $a2_key) {
        return 1;
    } // необходимый алгоритм возврата
    else if ($a1_key == $a2_key) {
        return 0;
    } else {
        return 0;
    }
}
?>