PHP从数组中排序数组值

时间:2012-01-28 00:34:36

标签: php sorting

我有一个数组,其中Key是销售人员。键的值是一个数组,有2个值:百分比值和总值。

简而言之,我试图将最高百分比值排在最前面。

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

我已经尝试了一些排列或数组排序功能,并且没有一个足够好甚至可以显示,因为它们没有示例,其中数组值是要排序的数组。

最终结果是我想显示哪个销售人员的百分比最高百分比。在上面的例子中,“Janice K.”有90%的百分比,她有40个销售。简而言之,她已经完成了40次销售,其中90%已经清算。

是否可以根据$ key的$值进行排序,如果它是一个数组?

2 个答案:

答案 0 :(得分:3)

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 :(得分:1)

使用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);

编辑:添加评论。 edit2:按销售额添加排序(desc)是百分比相等。