2014-04-01 119 views
0

我想获得总小时数和分钟数的总和。但是我的阵列似乎有问题。这里是我的代码:如何从数组中获得总和

foreach ($terminal_data as $terminal) { 
    $resultOffline = mysqli_query($con, 'SELECT DISTINCT terminal_id,terminal_status,local_time FROM terminal WHERE terminal_id = ' .$terminal['terminal_id']. ' and terminal_status = "OFFLINE" and local_time BETWEEN "' .$dt. '" 
    AND "' .$tomorrow. '" ORDER BY local_time ASC'); 

    echo 'terminal id : '. $terminal['terminal_id'].'<br/>'; 

    while($row = mysqli_fetch_array($resultOffline)) { 
     $offline_data[] = $row; 
    } 

    foreach ($offline_data as $offline) { 
     $resultOnline = mysqli_query($con, 'SELECT DISTINCT terminal_id,terminal_status,local_time FROM terminal WHERE terminal_id = ' .$terminal['terminal_id']. ' and terminal_status = "ONLINE" and local_time > "' .$offline['local_time']. '" ORDER BY local_time ASC'); 
     while($row = mysqli_fetch_array($resultOnline)) { 
      $online_data[] = $row; 
     } 

     $total_timeoff = array(); 
     $ontime = strtotime($online_data[0]['local_time']); 
     $offtime = strtotime($offline['local_time']); 
     $subTime= ($ontime - $offtime); 
     $arr[] =$subTime; 

     print_r($arr); 

     unset($arr); 
     unset($online_data); 
     // $totaltimeoffline += $timeoffline/3600; 
     // echo 'result : ' . $timeoffline; 
    } 
    unset($offline_data); 
} 

这是输出:

$ontime = strtotime($online_data[0]['local_time']); 
$offtime = strtotime($offline['local_time']); 
$subTime= ($ontime - $offtime); 
$arr[] = $subTime; 
print_r($arr); 

unset($arr); 

这是输出:

offline :2014-03-25 01:08:21 online : 2014-03-25 02:10:46--- 1 hours, 2 minutues 
offline :2014-03-25 02:10:46 online : 2014-03-25 02:31:18--- 0 hours, 20 minutues 
offline :2014-03-25 05:23:54 online : 2014-03-25 05:46:28--- 0 hours, 22 minutues 
offline :2014-03-25 09:12:08 online : 2014-03-25 09:23:01--- 0 hours, 10 minutues 
offline :2014-03-25 12:43:58 online : 2014-03-25 12:51:35--- 0 hours, 7 minutues 
offline :2014-03-25 17:44:20 online : 2014-03-25 18:01:02--- 0 hours, 16 minutues 
offline :2014-03-26 02:51:12 online : 2014-03-26 03:02:40--- 0 hours, 11 minutues 
offline :2014-03-26 03:02:40 online : 2014-03-26 03:28:41--- 0 hours, 26 minutues 
offline :2014-03-26 03:32:48 online : 2014-03-26 04:40:44--- 1 hours, 7 minutues 
offline :2014-03-26 10:14:08 online : 2014-03-26 10:44:03--- 0 hours, 29 minutues 
offline :2014-03-26 17:29:57 online : 2014-03-26 18:06:11--- 0 hours, 36 minutues 
offline :2014-03-26 23:28:03 online : 2014-03-26 23:36:54--- 0 hours, 8 minutues 
时,我尽量让我的 $subTime数组这样

Array ([0] => 3745) 
Array ([0] => 1232) 
Array ([0] => 1354) 
Array ([0] => 653) 
Array ([0] => 457) 
Array ([0] => 1002) 
Array ([0] => 688) 
Array ([0] => 1561) 
Array ([0] => 4076) 
Array ([0] => 1795) 
Array ([0] => 2174) 
Array ([0] => 531) 

任何人都知道什么我的代码有问题,我该如何解决这个问题?我真的很感激它。

+0

您的目标是什么?一个阵列与所有的时间?然后删除unset()命令并在循环后打印它。 – Petra

+0

我想获得小时和分钟的总数。 –

回答

0

你获得的结果以秒为
1点08分21秒 - 二点10分46秒--- 1小时,2个minutues
3745 = 1 * 60 * 60 + 2 * 60 * 20 + 15

如果需要的总时间:分:秒从该阵列只是概括为秒,并拉出小时和分钟:你必须移动

$total_sec = array_sum($arr); 

$hours = (int) ($total_sec/3600);     //extract the hours 
$mins = (int) (($total_sec - ($hours * 3600))/60); //extract the mins from the rest 
$secs = $total_sec - ($hours * 3600) - ($mins * 60); //what is left are the seconds 

UPDATE初始化和最终计算外foreach

$totaltimeoffline = 0; 
foreach ($offline_data as $offline) { 
     $resultOnline = mysqli_query($con, 'SELECT DISTINCT terminal_id,terminal_status,local_time FROM terminal WHERE terminal_id = ' .$terminal['terminal_id']. ' and terminal_status = "ONLINE" and local_time > "' .$offline['local_time']. '" ORDER BY local_time ASC'); 
    while($row = mysqli_fetch_array($resultOnline)) { 
     $online_data[] = $row; 
    } 

    $ontime = strtotime($online_data[0]['local_time']); 
    $offtime = strtotime($offline['local_time']); 
    $subTime= ($ontime - $offtime); 

    $totaltimeoffline += $subTime/ 3600; 
} 
echo 'result : ' . $totaltimeoffline ; 
+0

我明白你的观点。我已经这样做了..但是,似乎有一个阵列的问题..当我打印$ total_sec我得到这个= 37454977633169847441844391311069214768165631873719268 –

+0

你打印数组//总数在循环内;) 移动'$ total_timeoff = array( );'在循环之前,以及循环之后的总和计算。看到我的更新 –

+0

明白了。谢谢!! –