如何在PHP中排序3D数组?

时间:2014-02-07 14:16:47

标签: php arrays sorting multidimensional-array

如何对3D阵列进行排序?在这种情况下,我想在日期之后排序。谢谢?

array(2) { 
    ["garsoniere"]=>array(2) { 
          [0]=> array(5) {
              ["date"]=> string(19) "2014-02-04" 
              ["sponsored"]=> string(1) "0" 
              ["offer_status"]=> string(6) "active" 
              ["suprafata"]=> string(3) "111" 
              ["confort"]=> string(2) "-1" 
              ["title"]=> string(18) "Jimmy Humununukaua" 
         } 
         [1]=> array(5) { 
             ["date"]=> string(19) "2013-03-25" 
             ["sponsored"]=> string(1) "0" 
             ["offer_status"]=> NUL
             ["suprafata"]=> string(2) "23" 
             ["confort"]=> NULL 
             ["title"]=> string(38) "Garsoniera de vanzare in Marasti, Cluj" 
        } 
    } 
    ["apartamente"]=> array(2) { 
            [0]=> array(5) { 
                ["date"]=> string(19) "2014-02-05" 
                ["sponsored"]=> string(1) "0" 
                ["offer_status"]=> string(6) "active" 
                ["etaj"]=> string(2) "50" 
                ["title"]=> string(15) "Test Apartament"
            } 
            [1]=> array(5) { 
                ["date"]=> string(19) "2014-02-04" 
                ["sponsored"]=> string(1) "0" 
                ["offer_status"]=> string(6) "active" 
                ["etaj"]=> string(2) "50"  
                ["title"]=> string(13) "dfasfsdffasdf" 
            } 
    } 
} 

我知道它看起来不对,但我希望结果看起来像这样:

["apartamente"][0][date]=>2014-02-05.....[title]
["apartamente"][1][date]=>2014-02-04.....[title]
["garsoniere"][0][date]=>2014-02-04.....[title]
["garsoniere"][1][date]=>2013-03-25.....[title]

任何人都可以帮我吗?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

使用usort

初始数组

Array
(
    [giraffe] => Array
        (
            [date] => 2014-02-04
        )

    [zebra] => Array
        (
            [date] => 2012-02-04
        )

    [penguin] => Array
        (
            [date] => 2014-01-04
        )

)

排序算法

usort($arr, function($a, $b) {
    return ($a['date'] > $b['date'] ? 1 : ($a['date'] < $b['date'] ? -1 : 0));
});

分配后给出 -

Array
(
    [0] => Array
        (
            [date] => 2012-02-04
        )

    [1] => Array
        (
            [date] => 2014-01-04
        )

    [2] => Array
        (
            [date] => 2014-02-04
        )

)

Code grabbed from here

答案 2 :(得分:0)

尝试

$result = array();
foreach($arr as $key=>$val){
   foreach($val as $key1=>$val1){
        $result[$key][$key1]= $val1;
   }
}
ksort($result,SORT_NATURAL);

我不确定您在问题中指定的那种。 请参阅演示here