php find index, где разница во времени наименьшая по сравнению с массивом даты и времени - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь найти два признака, заданных двумя datetime и массивом datetime. Я хочу найти индекс соответствующих двух дат, где время ближе всего к тому, что доступно в массиве datetime. Вот что я попробовал:

$label = array();
$price = array();
$linePoints = array();

$ind = 0;
// format example $oT = '2018-05-05 12:05:55'
$checkOpen = strtotime($oT);
$checkClose = strtotime($cT);

while ($run = mysqli_fetch_object($query)){
    $p = $run->price;
    $l = $run->time;
    array_push($price, $p);
    array_push($label, $l);

    // format example: $l = '2018-05-05 12:05:52' 

    $check = strtotime($l);

    $dif = abs($checkOpen - $check);
    if($dif < 10){
        array_push($linePoints, $ind);
    }

    $dif = abs($checkClose - $check);
    if($dif < 10){
        array_push($linePoints, $ind);
    }

    $ind = $ind +1;

}

Проблема с этим подходом состоит в том, что этот подход может принести несколько совпадений, поскольку разница во времени вычисляется как миллисекунды? В конце я хочу, чтобы у двух было два указателя в массиве $linePoints. Есть идеи, как этого добиться? Thx!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вот и ты. Ваш код исправлен.

$label = array();
$price = array();
$linePoints = array();

$ind = 0;
// format example $oT = '2018-05-05 12:05:55'
$checkOpen = strtotime($oT);
$checkClose = strtotime($cT);

while ($run = mysqli_fetch_object($query)){

    $p = $run->price;
    $l = $run->time;
    array_push($price, $p);
    array_push($label, $l);

    // format example: $l = '2018-05-05 12:05:52' 

    $check = strtotime($l);

    $dif = abs($checkOpen - $check);
    if($dif < abs ($checkOpen - $linePoints[0]){
        $linePoints[0] = $ind);
    }

    $dif = abs($checkClose - $check);
    if($dif < $checkClose - $linePoints[1]){
        $linePoints[1] = $ind;
    }

    $ind = $ind +1;

}
0 голосов
/ 29 июня 2018

Для этой работы БД намного быстрее, чем PHP. Вы получите простоту и производительность.

if($run = mysqli_query($con,"SELECT event_id FROM Table ORDER BY ABS( DATEDIFF( time, $checkOpen ) ) LIMIT 1")){
$price1 = $run->price;
$label1 = $run->label
}

if($run = mysqli_query($con,"SELECT event_id FROM Table ORDER BY ABS( DATEDIFF( time, $checkClose ) ) LIMIT 1")){
$price2 = $run->price;
$label2 = $run->label
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...