如何从数组中获得总和

时间:2014-04-01 10:29:41

标签: php mysql

我想得到总小时数和分钟数的总和。但我的阵列似乎有问题。这是我的代码:

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);
}

这是输出:

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变成这样的数组时:

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

unset($arr);

这是输出:

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 )

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

1 个答案:

答案 0 :(得分:0)

你会在几秒钟内得到结果 01:08:21 - 02:10:46 --- 1小时,2分钟 3745 = 1 * 60 * 60 + 2 * 60 * 20 + 15

如果您需要总小时数:min:来自该数组的秒数,只需将其相加为秒,然后拉出小时和分钟:

$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

<强>更新

您必须将初始化和最终计算移到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 ;