Сортировка массива по ключам другого массива

Данный способ сортировки массива поможет, когда не получается получить отсортированную выборку из базы данных, или например когда выборка обсчитывается.

Сейчас я покажу пример сортировки состава футбольной команды.

Состав нужно отсортировать по амплуа.

Вратарь > Защитник > Полузащитник > Нападающий

Как видно сортировка по убыванию или возрастанию по любому полю не подойдет.

<?php
$sostav = array(
    "0" => array(
        "NAME" => "Агапцев",
        "MARK" => 22,
        "ROLE" => "Нападающий"
    ),
    "1" => array(
        "NAME" => "Алфимов",
        "MARK" => 1,
        "ROLE" => "Вратарь"
    ),
    "2" => array(
        "NAME" => "Белов",
        "MARK" => 5,
        "ROLE" => "Полузащитник"
    ),
    "3" => array(
        "NAME" => "Васильев",
        "MARK" => 10,
        "ROLE" => "Защитник"
    ),
    "4" => array(
        "NAME" => "Латынин",
        "MARK" => 7,
        "ROLE" => "Нападающий"
    ),
);
?>

Код функции

<?php
$arAmplua = array(); // В этот массив будут собираться значения поля,
                               // по которому сортируем
foreach ($sostav as $key => $arr) {
    $arAmplua[$key] = $arr['ROLE']; //Здесь задается поле по которому сортировать
}

//Здесь задается массив ключей
$arAmplua = array("Вратарь", 
                            "Защитник", 
                            "Полузащитник",
                            "Нападающий"
); 

foreach ($arAmplua as $amplua) {
    foreach ($sostav as $key => $arr) {
        if ($amplua == $arr['ROLE'])
            $resultArray[] = $arr; //Отсортированный массив
    }
}

$sostav= $resultArray;//Записываем отсортированный массив обратно в основной массив
?>
<!--Выводим результат-->
<pre><?print_r($sostav)?><pre>

Файл с примером можно скачать по ссылке
sort.php


Добавить комментарий