为什么在以下情况下内部数组值没有按 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
)
)
)
为了实现这一点,我尝试了下面的代码,但它没有成功,它没有 return 我上面想要的数组。我不明白我在哪里犯了错误。请更正我在代码中的错误。
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'];
});
}
}
我有一个名为 $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
)
)
)
为了实现这一点,我尝试了下面的代码,但它没有成功,它没有 return 我上面想要的数组。我不明白我在哪里犯了错误。请更正我在代码中的错误。
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'];
});
}
}