在Array of Objects中查找最接近的日期/时间
我正在寻找一些建议,以寻找最接近的startTime(推荐的startTime)的最佳方式。在Array of Objects中查找最接近的日期/时间
我已经走到这一步:
<?php
$array = array( array("meeting_id" => "1812",
"startTime" => "2016-10-07 14:30:00",
"endTime" => "2016-10-07 14:35:00"),
array("meeting_id" => "1812",
"startTime" => "2016-10-07 14:35:00",
"endTime" => "2016-10-07 14:40:00"),
array("meeting_id" => "1812",
"startTime" => "2016-10-07 14:40:00",
"endTime" => "2016-10-07 14:45:00"),
array("meeting_id" => "1813",
"startTime" => "2016-10-07 15:05:00",
"endTime" => "2016-10-07 15:10:00"),
array("meeting_id" => "1813",
"startTime" => "2016-10-07 15:10:00",
"endTime" => "2016-10-07 15:15:00"),
array("meeting_id" => "1813",
"startTime" => "2016-10-07 15:20:00",
"endTime" => "2016-10-07 15:25:00"),
);
arsort($array);
$firstTime = $array[0];
foreach($array as $key){
if($firstTime["startTime"] > $key["endTime"]){
// Do something in here.
}
}
print_r($array);
?>
印迹排列:
Array
(
[5] => Array
(
[meeting_id] => 1813
[startTime] => 2016-10-07 15:20:00
[endTime] => 2016-10-07 15:25:00
)
[4] => Array
(
[meeting_id] => 1813
[startTime] => 2016-10-07 15:10:00
[endTime] => 2016-10-07 15:15:00
)
[3] => Array
(
[meeting_id] => 1813
[startTime] => 2016-10-07 15:05:00
[endTime] => 2016-10-07 15:10:00
)
[2] => Array
(
[meeting_id] => 1812
[startTime] => 2016-10-07 14:40:00
[endTime] => 2016-10-07 14:45:00
)
[1] => Array
(
[meeting_id] => 1812
[startTime] => 2016-10-07 14:35:00
[endTime] => 2016-10-07 14:40:00
)
[0] => Array
(
[meeting_id] => 1812
[startTime] => 2016-10-07 14:30:00
[endTime] => 2016-10-07 14:35:00
)
)
我怎么会想到它的工作:
- 找到的最早的开始时间为meeting_id == 1812,然后查找最近的下次会议的ID!= 1812.然而,那些会议ID!= 1812的开始时间需要大于所选的结束时间1812
以下函数将把您的数组作为第一个参数,和会议ID作为第二,和将依次返回最近的会议的会议最早其ID不是$id
:
function get_nearest_meeting($meetings, $id)
{
// Start by sorting the meetings:
function sorter($a, $b)
{
return strtotime($a['startTime']) - strtotime($b['startTime']);
}
usort($meetings, 'sorter');
foreach($meetings as $meeting)
{
if($meeting['meeting_id'] == $id)
{
$earliest = strtotime($meeting['endTime']);
break;
}
}
// Now loop over again and get the next meeting:
foreach($meetings as $meeting)
{
if($meeting['meeting_id'] != $id && strtotime($meeting['startTime']) > $earliest)
{
return $meeting;
}
}
}
鉴于下列输入(存储在$meetings
):
Array
(
[0] => Array
(
[errors] => 0
[meeting_id] => 1812
[id] => 31305
[startTime] => 2016-10-07 14:00:00
[endTime] => 2016-10-07 14:10:00
[grade_id] => 87
)
[1] => Array
(
[errors] => 0
[meeting_id] => 1813
[id] => 31305
[startTime] => 2016-10-07 14:10:00
[endTime] => 2016-10-07 14:20:00
[grade_id] => 87
)
[2] => Array
(
[errors] => 0
[meeting_id] => 1812
[id] => 31305
[startTime] => 2016-10-07 14:10:00
[endTime] => 2016-10-07 14:20:00
[grade_id] => 87
)
[3] => Array
(
[errors] => 0
[meeting_id] => 1812
[id] => 31305
[startTime] => 2016-10-07 14:20:00
[endTime] => 2016-10-07 14:30:00
[grade_id] => 87
)
[4] => Array
(
[errors] => 0
[meeting_id] => 1813
[id] => 31305
[startTime] => 2016-10-07 14:20:00
[endTime] => 2016-10-07 14:30:00
[grade_id] => 87
)
[5] => Array
(
[errors] => 0
[meeting_id] => 1815
[id] => 31305
[startTime] => 2016-10-07 14:30:00
[endTime] => 2016-10-07 14:40:00
[grade_id] => 87
)
[6] => Array
(
[errors] => 0
[meeting_id] => 1812
[id] => 31305
[startTime] => 2016-10-07 14:30:00
[endTime] => 2016-10-07 14:40:00
[grade_id] => 87
)
[7] => Array
(
[errors] => 0
[meeting_id] => 1813
[id] => 31305
[startTime] => 2016-10-07 14:30:00
[endTime] => 2016-10-07 14:40:00
[grade_id] => 87
)
[8] => Array
(
[errors] => 0
[meeting_id] => 1815
[id] => 31305
[startTime] => 2016-10-07 14:40:00
[endTime] => 2016-10-07 14:50:00
[grade_id] => 87
)
[9] => Array
(
[errors] => 0
[meeting_id] => 1813
[id] => 31305
[startTime] => 2016-10-07 14:40:00
[endTime] => 2016-10-07 14:50:00
[grade_id] => 87
)
)
并调用它像这样:
get_nearest_meeting($meetings, 1812);
我们最终得到以下结果:
Array
(
[errors] => 0
[meeting_id] => 1813
[id] => 31305
[startTime] => 2016-10-07 14:10:00
[endTime] => 2016-10-07 14:20:00
[grade_id] => 87
)
嗨BenM - 感谢。然而,它可能会有点不同,所以当'id'通过时,它将检查最早的'startTime',然后它将检查其余的以找到最接近的开始时间,该时间大于所选择的最早时间的'endTime'在传递的'id'上? –
好的,所以你希望找到'meeting_id' =='1812'的最早开始时间,然后找到ID!='1812'最接近的* next *会议? – BenM
确切地说:) –
您可以用'startTime'进行排序,并采取第一行。对于排序[sort-multi-dimensional-array-by-specific-key](http://stackoverflow.com/questions/4022289/sort-multi-dimensional-array-by-specific-key) –
你试过自己写一些代码? – Dekel
@Dekel是的,我现在就为你提供。 –