PHP сортировка значений массива из массива - PullRequest
1 голос
/ 28 января 2012

У меня есть массив, где ключом является продавец. Значение ключа представляет собой массив с двумя значениями: процентное значение и общее значение.

В двух словах, я пытаюсь отсортировать максимальное процентное значение сверху.

$sales = array(
    "Johnny Smith" => array(75.25,45), 
    "Ash Han" => array(55.67, 99), 
    "Janice K." => array(90.00, 40)
);

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

Конечный результат - то, где я хотел бы показать, у какого продавца есть самый высокий процент до самого низкого процента. В случае выше, "Дженис К." имеет процент 90,00, и у нее 40 продаж. Короче говоря, она сделала 40 продаж, и 90% из них очистились.

Можно ли выполнить сортировку по значению $ ключа $, если это массив?

Ответы [ 2 ]

3 голосов
/ 28 января 2012

uasort() сортирует массив с пользовательской функцией и поддерживает привязку индекса. Вот пример реализации с использованием анонимной функции.

uasort($sales, function($a, $b) {
    return $b[0] - $a[0];
});
print_r($sales);

Выше приведут

Array (
    [Janice K.] => Array (
            [0] => 90
            [1] => 40
    )
    [Johnny Smith] => Array (
            [0] => 75.25
            [1] => 45
    )
    [Ash Han] => Array (
            [0] => 55.67
            [1] => 99
    )
)
1 голос
/ 28 января 2012

использование uasort .

$sales = array(
    "Johnny Smith" => array(75.25,45), 
    "Ash Han" => array(55.67, 99), 
    "Janice K." => array(55.00, 40)
);

//comparison function.
function cmp($a,$b){
    //if the percentages (key 0) are equal...
    if($b[0]==$a[0]){
        //check sales count (key 1)
        if($b[1]==$a[1]){
            //if both are equal, return 0
            return 0;
        }
        //return -1 or 1 based on which sales are higher
        return $b[1]<$a[1]?-1:1;
    }
    //return -1 or 1 based on which percentage is higher
    return $b[0]<$a[0]?-1:1;
}
//run sort on sales using custom compare function.
uasort($sales, 'cmp');
//print the values.
echo '<pre>';
print_r($sales);

edit: добавлены комментарии.edit2: добавлена ​​сортировка по продажам (desc), процент равен.

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