簡體   English   中英

在對象數組中查找最接近的日期/時間

[英]Find closest date/time in Array of Objects

我正在尋找有關找到最接近的startTime(推薦的startTime)的最佳方法的建議。

到目前為止,我得到的是:

<?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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM