Как эффективно считать блоки значений в массиве - PullRequest
0 голосов
/ 25 июня 2019

У меня есть массив данных, в котором каждая позиция содержит 2 значения: расстояние в метрах и временную метку.И мне нужно знать, когда измерения говорят нам, что они близки к начальной точке, которую я эффективно использую для расстояния, поскольку я могу проводить до 100000 измерений в день.

Графическое представление данных

[['distance':3.4938212,'timestamp':'2019-06-21 02:00:00'],['distance':4.4345342,'timestamp':'2019-06-21 02:00:33'],['distance':3.5482918,'timestamp':'2019-06-21 02:02:35']...]

Этот график содержит данные массива, поэтому отображаются расстояния с маркером времени.Я хотел бы знать, сколько раз вы были близки (в данном случае 3).Проблема в том, что указанные значения очень случайны с кодом, который я использую.

$gateway_single = $this->Entrada->find('all', array('conditions' => array('Entrada.id' => $gateway[Constantes::TABLA_RELACIONAL_BEACONS_GATEWAYS]['identrada_secundaria'] ) ) );

$distances = $this->Entrada->query('select * from gateway_beacon_distances where beacon_kontakt_id like \'' . $beacon_kontakt_id . '\' and gateway_kontakt_id = \'' . $gateway_single[0]['Entrada']['titulo'] . '\' and date(`date`) = \'' . $fecha . '\' order by date ASC;');

$start['running'] = 0;
$start['time_start'] = null; 
$start['last_time'] = null; 
$times_gone_gateway = 0;
$time_near_gateway = 0;

$number_of_points= 0;
foreach ($distances as $distance) {
    if ($start['running'] == 0) {
        $times_gone_gateway++;
        $start['running'] = 1;
        $start['time_start'] = $distance['gateway_beacon_distances']['date'];
        $start['last_time'] = $distance['gateway_beacon_distances']['date'];
    } else {
        $date1 = new DateTime($start['last_time']);
        $date2 = new DateTime($distance['gateway_beacon_distances']['date']);
        $diff_seconds = $date1->diff($date2);
        $time_beetween_lectures = ( ($diff_seconds->days * 24 ) * 3600 ) + ($diff_seconds->h * 3600) + ( $diff_seconds->i * 60 ) + $diff_seconds->s;

        if ($time_beetween_lectures > 15000) {
            if($number_of_points > 10){
                echo 'Distance: ' . $distance['gateway_beacon_distances']['distance_m'] . ' Time: ' . $time_beetween_lectures. '<br>';
                echo 'Start date: ' . $start['time_start'] . ' End date: ' . $start['last_time']. '<br><br><br>';
                $times_gone_gateway++;
                $date1 = new DateTime($start['time_start']);
                $date2 = new DateTime($start['last_time']);
                $time_near_gateway += ( ($diff_seconds->days * 24 ) * 3600 ) + ($diff_seconds->h * 3600) + ( $diff_seconds->i * 60 ) + $diff_seconds->s;
            }

            $start['running'] = 1;
            $start['time_start'] = $distance['gateway_beacon_distances']['date'];
            $start['last_time'] = $distance['gateway_beacon_distances']['date']; 
            $number_of_points = 0;
        }
    }
    $number_of_points++;
}

if ($start['running'] == 0) {
    $date1 = new DateTime($start['time_start']);
    $date2 = new DateTime($start['last_time']);

    $time_near_gateway += ( ($diff_seconds->days * 24 ) * 3600 ) + ($diff_seconds->h * 3600) + ( $diff_seconds->i * 60 ) + $diff_seconds->s;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...