首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php对数组重新排序

php对数组重新排序
EN

Stack Overflow用户
提问于 2011-10-11 16:10:10
回答 3查看 160关注 0票数 0

我有一个按年份和月份分隔的条目数组,如下所示。我需要对此数组进行排序,以便条目先按年份“分组”,然后按类别“分组”。

代码语言:javascript
复制
Array
(
    [Oct 2011] => Array
        (
            [0] => Array
                (
                    [title] => CAD Drawing Updates
                    [file] => /gm-June2010-driver.pdf
                    [category] => Windows
                )
        )


    [Sep 2011] => Array
        (
            [0] => Array
                (
                    [title] => title
                    [file] => /gm-June2010-driver.pdf
                    [category] => Windows
                )

            [1] => Array
                (
                    [title] => edges
                    [file] => /gm-June2010-driver.pdf
                    [category] =>Walling
                )

            [2] => Array
                (
                    [title] => Specification update
                    [file] => /gm-June2010-driver.pdf
                    [category] => Windows
                )
        )
)

所以这就是我要找的东西。

代码语言:javascript
复制
Array
(
    [Oct 2011] => Array
        (
                [Windows] => Array
                        (
                            [0] => Array
                                (
                                    [title] => CAD Drawing Updates
                                    [file] => /gm-June2010-driver.pdf
                                )                       
                        )
        )


    [Sep 2011] => Array
        (
                [Windows] => Array
                                (
                            [0] => Array
                                (
                                    [title] => title
                                    [file] => /gm-June2010-driver.pdf
                                    [category] => Windows
                                )


                            [1] => Array
                                (
                                    [title] => Specification update
                                    [file] => /gm-June2010-driver.pdf
                                    [category] => Windows
                                )                                                               
                                )   
                [Walling] => Array
                                (
                            [0] => Array
                                (
                                    [title] => edges
                                    [file] => /gm-June2010-driver.pdf
                                    [category] => Curtain Walling
                                )                                                               
                                )                                            
        )
)

我不确定这是否是一个排序功能的工作,任何帮助都将不胜感激,谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-11 16:14:03

不,这不能用排序函数来完成,你需要通过使用嵌套的foreach循环遍历原始数组来创建一个新的数组。

代码语言:javascript
复制
$newArr = array();
foreach($arr as $month => items) {
  foreach($items as $data) {
    $newArr[$month][$data["category"]][] = $data;
  }
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-11 16:35:44

你不想排序,只想重命名关键字。PHP数组不支持直接重命名键,因此您需要首先创建一个新数组,该数组是在保留现有值的同时使用新键构建的。

最后,您可以用新数组替换原来的数组:

代码语言:javascript
复制
$rekeyed = array();
foreach($array as $monthYear => &$value)
{
    $r = sscanf($monthYear, '%s %d', $month, $year);
    if ($r != 2) throw new Exception(sprintf('Invalid Key "%s".', $monthYear));
    $categories = array();
    foreach($value as &$item)
    {
        $category =& $item['category'];
        unset($item['category']);
        $categories[$category][] =& $item;
    }
    unset($item);
    $value =& $categories;
    unset($categories);    
    $rekeyed[$year][$month] =& $value;
}
unset($value);
$array =& $rekeyed;
unset($rekeyed);
print_r($array);

输出:

代码语言:javascript
复制
Array
(
    [2011] => Array
        (
            [Oct] => Array
                (
                    [Windows] => Array
                        (
                            [0] => Array
                                (
                                    [title] => CAD Drawing Updates
                                    [file] => /gm-June2010-driver.pdf
                                )

                        )

                )

            [Sep] => Array
                (
                    [Windows] => Array
                        (
                            [0] => Array
                                (
                                    [title] => title
                                    [file] => /gm-June2010-driver.pdf
                                )

                        )

                    [Walling] => Array
                        (
                            [0] => Array
                                (
                                    [title] => edges
                                    [file] => /gm-June2010-driver.pdf
                                )

                        )

                )

        )

)

Demo

票数 0
EN

Stack Overflow用户

发布于 2011-10-11 16:17:11

我认为你应该关注的函数是uasort。

http://www.php.net/manual/en/function.uasort.php

首先在主数组上进行排序,对于数组中的每个元素,在子数组上进行usort。

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

https://stackoverflow.com/questions/7723076

复制
相关文章

相似问题

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