首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于数组内部键值的排序数组

基于数组内部键值的排序数组
EN

Stack Overflow用户
提问于 2011-06-30 14:12:35
回答 3查看 7.4K关注 0票数 8

我有一个类似下面提到的数组

代码语言:javascript
复制
Array
(
[6] => Array
    (
        [name] => Extras
        [total_products] => 0
        [total_sales] => 0
        [total_affiliation] => 0
    )

[5] => Array
    (
        [name] => Office Products
        [total_products] => 7
        [total_sales] => 17
        [total_affiliation] => 8
    )

[1] => Array
    (
        [name] => Hardware Parts
        [total_products] => 6
        [total_sales] => 0
        [total_affiliation] => 0
    )

)

目前,订单是:附加,办公产品,硬件部件

我想以这样的方式对主数组进行排序:按内部数组的total_sales降序排序

因此订单将是:办公产品,附加软件,硬件部件

有没有需要帮助的人

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-30 14:23:25

PHP 5.3:

代码语言:javascript
复制
usort($array, function ($a, $b) { return $b['total_sales'] - $a['total_sales']; });

PHP 5.2-:

代码语言:javascript
复制
usort($array, create_function('$a,$b', 'return $b["total_sales"] - $a["total_sales"];'));
票数 16
EN

Stack Overflow用户

发布于 2011-06-30 14:17:48

使用自定义函数和usort

代码语言:javascript
复制
<?php
function custom_sale_sort($a, $b)
{
    if ($a['total_sales'] < $b['total_sales'])
        return 1;
    elseif ($a['total_sales'] == $b['total_sales'])
        return 0;
    else
        return -1;
}

usort($array, 'custom_sale_sort');

如果您需要在另一个方向上对数组进行排序,那么在自定义函数中交换(1,-1)值。

票数 3
EN

Stack Overflow用户

发布于 2011-06-30 14:30:10

下面是可以用来进行多维排序的类

注意:您必须有PHP5

代码语言:javascript
复制
class MultiDimensionSort
{
    const ASCENDING = 0,DESCENDING = 1;

    public  $sortColumn,$sortType;

    public function __construct($column = 'price', $type = self::ASCENDING)
    {
        $this->column = $column;
        $this->type = $type;
    }

    public function cmp($a, $b)
    {
        switch($this->type)
        {
            case self::ASCENDING:
                return ($a[$this->column] == $b[$this->column]) ? 0 : (($a[$this->column] < $b[$this->column]) ? -1 : 1);
            case self::DESCENDING:
                return ($a[$this->column] == $b[$this->column]) ? 0 :(($a[$this->column] < $b[$this->column]) ? 1 : -1);
            default:
                assert(0); // unkown type
        }
    }
}

就像您在数组上面包含名为summary的数组一样。然后你可以通过下面的语句进行排序。//假设您的数组变量为$summary

代码语言:javascript
复制
$s = new MultiDimensionSort('total_sales', MultiDimensionSort::DESCENDING); // sort by total_sales

usort($summary, array($s, 'cmp'));
print"<pre>";print_r($summary);

干杯!也许这对你有帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6530631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档