在PHP中对多维数组进行排序

时间:2013-07-18 10:15:07

标签: php sorting multidimensional-array

我有这个多维数组,名为$rent

Array
(
    [product2] => Array
        (
            [dates] => Array
                (
                    [2013-07-25] => 2
                    [2013-07-23] => 1
                    [2013-07-21] => 3
                )

        )

    [product3] => Array
        (
            [dates] => Array
                (
                    [2013-07-24] => 5
                    [2013-07-22] => 4
                    [2013-07-20] => 3
                )

        )

    [product1] => Array
        (
            [dates] => Array
                (
                    [2013-07-29] => 1
                    [2013-07-28] => 2
                    [2013-07-27] => 2
                )

        )

)

我想做一个双重排序:

  1. 首先,按产品X升序
  2. 然后,对于每种产品,按租金提升日期
  3. 这样生成的数组将是:

    Array
    (
        [product1] => Array
            (
                [dates] => Array
                    (
                        [2013-07-27] => 2
                        [2013-07-28] => 2
                        [2013-07-29] => 1
                    )
    
            )
    
        [product2] => Array
            (
                [dates] => Array
                    (
                        [2013-07-21] => 3
                        [2013-07-23] => 1
                        [2013-07-25] => 2
                    )
    
            )
    
        [product3] => Array
            (
                [dates] => Array
                    (
                        [2013-07-20] => 3
                        [2013-07-22] => 4
                        [2013-07-24] => 5
                    )
    
            )
    
    )
    

    我怎样才能达到这个目标?非常感谢提前

3 个答案:

答案 0 :(得分:1)

试试这个:

ksort($rent);
foreach($rent as &$item) {
    ksort($item['dates']);
}

答案 1 :(得分:1)

您只需 ksort 产品,然后对其进行迭代并将其用于日期键。

ksort($products);

foreach($products as &$product)
    ksort($product['dates']);

$products是您向我们展示的数组。请注意,您需要将foreach循环中的值作为引用传递(使用&运算符),否则更改将不会在原始数组中更新。

答案 2 :(得分:1)

了解你的问题; Nadh解决方案几乎就在那里。但我相信你想要ksort()

这是我对Nadh回答的更正

ksort($rent);

foreach($rent as $product => $dates) {
    ksort($rent[$product]['dates']);
}

print_r($rent);