Как сортировать по параметрам ассоциативного массива.

Возника задача сортировки ассоциативного массива по определенному параметру.
Например, есть массив с товарами, а нужно отсортировать массив по цене или по названию товара.

Это можно сделать следующими функциями:


function sort_params(&$t, $sortBy, $sortDir) {
    foreach($t as &$v) {
        $v['__________1'] = $sortBy;
        $v['__________2'] = $sortDir;
    }
    usort($t, 'cmp');
    foreach($t as &$v) {
        unset($v['__________1']);
        unset($v['__________2']);
    }
}

//Сортировка
function cmp($a, $b)
{
    // Если поле сортировки не задано сортируем по цене
    $sortBy = $a['__________1'];
    if ($sortBy != '') {
        $at = $a[$sortBy];
        $bt = $b[$sortBy];
    } else {
        $at = isset($a['price1']) ? $a['price1'] : $a['price2'];
        $at = intval($at);
        $bt = isset($b['price1']) ? $b['price1'] : $b['price2'];
        $bt = intval($bt);
    }
if ($at == $bt) {
    return 0;
}
//По умолчанию сортируем ASC
$sortDir = $a['__________2'];
if ($sortDir == 'ASC') {
    return ($at < $bt) ? -1 : 1;
} else {
    return ($at < $bt) ? 1 : -1;
}
}

//Использование
$massiv = array();
//Сортируем массив по цене в порядке увеличения
sort_params($massiv, 'price', 'ASC');

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

Ваш адрес email не будет опубликован.