为什么在以下场景中,内部数组值没有按照UNIX时间戳值的升序进行排序


Why the inner array values are not getting sorted in ascending order of UNIX times tamp values in following scenario?

我有一个多维数组标题为$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
                )
        )
)

试试这个:

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