【问题标题】:PHP sorting array values from within an arrayPHP从数组中排序数组值
【发布时间】:2012-01-28 09:12:07
【问题描述】:

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

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

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

我尝试了一些排列或数组排序函数,但没有一个足以显示,因为它们没有数组值是要排序的数组的示例。

最终结果是我想显示哪个销售人员的百分比从最高到最低。在上面的案例中,“Janice K”。有 90.00 的百分比,她有 40 次销售。简而言之,她完成了 40 笔交易,其中 90% 都已结清。

如果是数组,是否可以根据 $key 的 $value 进行排序?

【问题讨论】:

    标签: php sorting


    【解决方案1】:

    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
        )
    )
    

    【讨论】:

    • @coffeemonitor 这就是我一开始写的字面意思。但是,我发现的问题是,如果 abs($b[0]-$a[0]) 小于 1,事情就会出现问题。返回值似乎被转换为一个整数,它将小于 abs(1) 的值截断为 0,这意味着“这些是相等的”(它们不是)。这就是为什么我将答案更改为返回-1,0,1。也许一个简单的($b[0]-$a[0])*100 会更容易。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2018-10-17
      相关资源
      最近更新 更多