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