2014-05-29 2 views
0

Я использую два запроса для сбора значений времени на два отдельных массива. Я изменил порядок массивов, и я хочу вычесть первое значение в одном массиве из первого значения во втором, вычесть второе значение из второго значения, третье с третьего и т. Д. Я хотел бы показать разницу в минутах между двумя массивами. Кто-нибудь знает как это сделать?Получение разницы во времени между двумя массивами, содержащими множественные значения времени

Вот мой код:

$sql1 = "SELECT log_time FROM log_table WHERE client_name = 'opus' AND server_protocol = '638'"; 
$query = $this->db->prepare($sql1); 
$query->execute(); 
$Tim1 = $query->fetchAll(); 
$Tim1 = array_reverse($Tim1); 

$sql2 = "SELECT log_time FROM log_table WHERE client_name = 'opus' AND server_protocol = '22'"; 
$query = $this->db->prepare($sql2); 
$query->execute(); 
$Tim2 = $query->fetchAll(); 
$Tim2 = array_reverse($Tim2); 

for ($x=0; $x<count($Tim1); $x++) { 
    $result = date_diff($Tim1[0], $Tim2[0]); 
} 

Когда я print_r значения массива они выглядят следующим образом:

print_r($Tim1); 
print_r($Tim2); 

Array ([0] => stdClass Object ([log_time] => 13:08:29) [1] => stdClass Object ([log_time] => 12:15:45) [2] => stdClass Object ([log_time] => 11:40:00) [3] => stdClass Object ([log_time] => 09:31:46)) 
Array ([0] => stdClass Object ([log_time] => 13:51:55) [1] => stdClass Object ([log_time] => 12:29:19) [2] => stdClass Object ([log_time] => 12:12:02) [3] => stdClass Object ([log_time] => 09:36:48)) 

print_r($result); 

Разница должна быть около 94 минут. Когда я печатаю_r ($ result), я получаю предупреждение: «date_diff() ожидает, что параметр 1 будет DateTimeInterface, данный объект ...». Кто-нибудь знает, почему это происходит?

+0

'$ TimOne' и' $ TimeTwo' не являются массивами, это значения из последних элементов '$ Tim1' и' $ Tim2'. Каждый раз в цикле 'foreach' вы переписываете переменную, не нажимая на массив. – Barmar

+0

BTW, при итерации по массиву, вы должны использовать '$ x Barmar

ответ

1

Вы получаете доступ к тем же элементам массива каждый раз через цикл, и вы переписываете $result, а не накапливаете различия. Попробуйте:

$result = 0; 
for ($x=0; $x<count($Tim1); $x++) { 
    $result += (strtotime($Tim1[$x]->log_time) - strtotime($Tim2[$x]->log_time)); 
} 

$result будет сумма разницы во времени в секундах. Разделите на 60, чтобы получить минуты.

+0

$ результат/60 = 94.066666666667. Спасибо, это потрясающе. –

Смежные вопросы