在多维关联数组排序时,数组键丢失

时间:2017-04-24 08:13:22

标签: php

这是我拥有的数组:

Array
            (
                [02nd Apr-04th Apr] => Array
                    (
                        [facebook] => 0
                        [youtube] => 9
                        [timestamp] => 1491177600
                    )

                [03rd Mar-05th Mar] => Array
                    (
                        [facebook] => 0
                        [youtube] => 0
                        [timestamp] => 1488672000
                    )

)

我想通过" timestamp"对此进行排序。值。所以预期的输出是:

Array
            (
                [03rd Mar-05th Mar] => Array
                    (
                        [facebook] => 0
                        [youtube] => 0
                        [timestamp] => 1488672000
                    )
                [02nd Apr-04th Apr] => Array
                    (
                        [facebook] => 0
                        [youtube] => 9
                        [timestamp] => 1491177600
                    )

)

我做了什么:

usort($array, function($a, $b) {
              if ($a['timestamp'] == $b['timestamp']) {
                   return 0;
              }
              return ($a['timestamp'] < $b['timestamp']) ? -1 : 1;
})

当我这样做时,排序工作但数组键丢失了。这是我得到的结果:

Array
            (
                [0] => Array
                    (
                        [facebook] => 0
                        [youtube] => 0
                        [timestamp] => 1488672000
                    )
                [1] => Array
                    (
                        [facebook] => 0
                        [youtube] => 9
                        [timestamp] => 1491177600
                    )

)

2 个答案:

答案 0 :(得分:2)

使用uasort

uasort($array, function($a, $b) {
              if ($a['timestamp'] == $b['timestamp']) {
                   return 0;
              }
              return ($a['timestamp'] < $b['timestamp']) ? -1 : 1;
})

答案 1 :(得分:0)

usort无法保留密钥,请使用uasort替换它。你可以使用&lt; =&gt;简化比较功能。

uasort($array, function($a, $b) {
   return ($a['timestamp'] <=> $b['timestamp']);
})