首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据PHP中的字段数对多维数组进行排序?

如何根据PHP中的字段数对多维数组进行排序?
EN

Stack Overflow用户
提问于 2012-12-25 09:46:32
回答 1查看 83关注 0票数 0

可能重复: How do I sort a multidimensional array in php

.

,这不是一个复制的__。关于对多维数组的排序,确实存在大量关于堆栈溢出的问题(我相信,在发布我的问题之前,我昨天已经读过其中的大多数),但我没有看到任何一个问题提到过我的特定问题:按字段的校验号排序。下面@dev-null居民给出的答案就是这样的。

.

我试图为PHP中的多维数组创建一个灵活的排序函数。

我想要的灵活性是排序字段的数量(对于第1、2或3级排序可以是1、2或3),以及这些字段的标识。

这是我的数组中的一个示例:

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [title] => Australia Book
        [price] => 209.00
        [code] => 3571313
        [con] => Australia & Oceania
        [ctry] => Australia
    )

[1] => Array
    (
        [title] => New Zealand Book
        [price] => 169.00
        [code] => 3571346
        [con] => Australia & Oceania
        [ctry] => New Zealand
    )

[2] => Array
    (
        [title] => Austria Book
        [price] => 129.00
        [code] => 3571230
        [con] => Europe
        [ctry] => Austria
    )

[3] => Array
    (
        [title] => Austria Pocket Book
        [price] => 119.00
        [code] => 3571354
        [con] => Europe
        [ctry] => Austria
    )



[4] => Array
    (
        [title] => Amsterdam Book
        [price] => 59.00
        [code] => 3571350
        [con] => Europe
        [ctry] => Netherlands
    )

[5] => Array
    (
        [title] => Britain
        [price] => 59.00
        [code] => 3571315
        [con] => Europe
        [ctry] => Britain
    )
)

我有时只需要按标题排序,有时按标题排序,有时按欺诈排序,然后按标题排序,等等。

我已经做了一个类似于这样的2级排序:

代码语言:javascript
复制
usort($arrCatalog, array('Catalogs_model', 'multi_compare'));

function multi_compare($a ,$b) {
if ($a['con'] < $b['con']) {
    return -1;
  } elseif  ($a['con'] > $b['con']) {
    return 1;
  } else {
    return strcmp($a['title'], $b['title']);
  }

}

第一个问题是,当从multi_compare内部调用参数时,如何将参数传递给usort函数。

在我们解决了这个问题之后,我很乐意得到一些关于如何更改multi_sort以便标识和\或字段的数量发生变化的提示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-25 09:56:25

您正在使用静态方法进行自定义排序,因此可以在usort之前在该类中设置一些静态属性。

代码语言:javascript
复制
class Catalogs_model{
    public static $usort_criteria = array();

    public static function multi_compare($a,$b){
        foreach(self::$usort_criteria as $what => $order){
            if($a[$what] == $b[$what]){
                continue;
            }
            return (($order == 'desc')?-1:1) * strcmp($a[$what], $b[$what]);
        }
        return 0;
    }
}

Catalogs_model::$usort_criteria = array(
   'con' => 'asc',
   'title' => 'asc'
);
usort($arrCatalog, array('Catalogs_model', 'multi_compare'));

当然,它需要一些调整,因为现在它只对字符串进行排序。

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

https://stackoverflow.com/questions/14029506

复制
相关文章

相似问题

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