为什么在下面的场景中,内部数组值没有按UNIX的升序排序?

时间:2015-08-04 11:06:14

标签: php arrays sorting multidimensional-array associative-array

我的标题为$events的多维数组如下:

print_r($events);

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => Student Organisation
                    [event_id] => 239
                    [time_stamp] => 1437065590 //Thu, 16 Jul 2015 16:53:10 GMT
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 237
                    [time_stamp] => 1437065259 //Thu, 16 Jul 2015 16:47:39 GMT
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => TestGroupShweta
                    [event_id] => 238
                    [time_stamp] => 1437065491 //Thu, 16 Jul 2015 16:51:31 GMT
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 252
                    [time_stamp] => 1438063373 //Tue, 28 Jul 2015 06:02:53 GMT
                )

            [1] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 244
                    [time_stamp] => 1437475382 //Tue, 21 Jul 2015 10:43:02 GMT
                )

            [2] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => The Namesake
                    [event_id] => 243
                    [time_stamp] => 1437468870 //Tue, 21 Jul 2015 08:54:30 GMT
                )

        )

    [4] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 242
                    [time_stamp] => 1437391684 //Mon, 20 Jul 2015 11:28:04 GMT
                )

        )

    [5] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 201
                    [time_stamp] => 1428315119 //Mon, 06 Apr 2015 10:11:59 GMT
                )

            [1] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 240
                    [time_stamp] => 1437114920 //Fri, 17 Jul 2015 06:35:20 GMT
                )

            [2] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 241
                    [time_stamp] => 1437114922 // Fri, 17 Jul 2015 06:35:22 GMT
                )   

        )

)

如果仔细观察索引[3][5]的元素包含三个内部数组元素。我想按照相应内部数组的键time_stamp中出现的UNIX时间戳值的升序对这三个数组元素进行排序。

只有当存在多个内部数组元素时,才应执行此排序操作。在上面的数组中,只应在[3][5]的情况下执行,而不是为其他元素执行。

内部数组索引也应该改变(即从0,1,2,3,......等等)。

执行排序操作后,所需的排序数组应完全如下:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => Student Organisation
                    [event_id] => 239
                    [time_stamp] => 1437065590 //Thu, 16 Jul 2015 16:53:10 GMT
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 237
                    [time_stamp] => 1437065259 //Thu, 16 Jul 2015 16:47:39 GMT
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => TestGroupShweta
                    [event_id] => 238
                    [time_stamp] => 1437065491 //Thu, 16 Jul 2015 16:51:31 GMT
                )

        )

    [3] => Array
        (

       [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => The Namesake
                    [event_id] => 243
                    [time_stamp] => 1437468870 //Tue, 21 Jul 2015 08:54:30 GMT
                )

            [1] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 244
                    [time_stamp] => 1437475382 //Tue, 21 Jul 2015 10:43:02 GMT
                )

            [2] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 252
                    [time_stamp] => 1438063373 //Tue, 28 Jul 2015 06:02:53 GMT
                )
        )

    [4] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 242
                    [time_stamp] => 1437391684 //Mon, 20 Jul 2015 11:28:04 GMT
                )

        )

    [5] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 201
                    [time_stamp] => 1428315119 //Mon, 06 Apr 2015 10:11:59 GMT
                )

            [1] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 240
                    [time_stamp] => 1437114920 //Fri, 17 Jul 2015 06:35:20 GMT
                )

            [2] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 241
                    [time_stamp] => 1437114922 // Fri, 17 Jul 2015 06:35:22 GMT
                )

        )

)

为了实现这一点,我尝试了下面的代码,但它没有成功,它没有返回上面我想要的数组。我不明白我犯了哪些错误。请纠正我在代码中的错误。

foreach($events as $event) {
  if(sizeof($event) > 1) { 
    foreach($event as &$allFeed) { 
      usort($allFeed,function($a,$b) { 
        return $a['time_stamp'] - $b['time_stamp']; 
      }); 
    }    
  }
}

这应该以有效和可靠的方式完成。

尝试以下代码后得到的数组如下:

uasort($events,function($a,$b){
          return strtotime($b[0]['time_stamp'])-strtotime($a[0]['time_stamp']);
        });
        print_r($events);


Array
(
    [5] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 1
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 201
                    [time_stamp] => 1428315119
                )

            [1] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 240
                    [time_stamp] => 1437114920
                )

            [2] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 241
                    [time_stamp] => 1437114922
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 252
                    [time_stamp] => 1438063373
                )

            [1] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 244
                    [time_stamp] => 1437475382
                )

            [2] => Array
                (
                    [rsvp_id] => 0
                    [is_liked] => 
                    [group_name] => The Namesake
                    [event_id] => 243
                    [time_stamp] => 1437468870
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 0
                    [is_liked] => 
                    [group_name] => TestGroupShweta
                    [event_id] => 238
                    [time_stamp] => 1437065491
                )

        )

    [0] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => Student Organisation
                    [event_id] => 239
                    [time_stamp] => 1437065590
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 
                    [is_liked] => 
                    [group_name] => 
                    [event_id] => 237
                    [time_stamp] => 1437065259
                )

        )

    [4] => Array
        (
            [0] => Array
                (
                    [rsvp_id] => 1
                    [is_liked] => 3397
                    [group_name] => 
                    [event_id] => 242
                    [time_stamp] => 1437391684
                )

        )

)

1 个答案:

答案 0 :(得分:2)

试试这个:

foreach($events as &$event) {
  if(count($event) > 1) { 
      usort($event,function($a,$b) { 
        return $a['time_stamp'] - $b['time_stamp']; 
      }); 
  }
}