总计存储在数组PHP中的所有时间

时间:2014-05-19 07:26:18

标签: php arrays

我有一个数组变量,我一直存储在这个数组中。 我想要计算我的数组中的所有存储值。 我尝试使用for循环,但它无法读取时间格式。

我正在使用CakePHP

在我的usercontroller中:

$this->set('project_time',$sele_lang['time']);

我使用该代码来获取每个项目的估计时间。 我对此没有任何问题。

然后在我的PHP中获取设定时间 我创建了一个变量和数组来存储时间。

$ target_time和$ stored_time = array()

if(i have two projects) //i assume that i have two project
for($i = 0; $i < count($lang_val); $i++)
{
    $target_time = $project_time; // this will get the estimated time
    $stored_time[] = $target_time; //this will store the time in array.

    $tempo = date("H:i:s", strtotime($stored_time[$i])); //this will get the first array value.

}

我在这里堆积。

我不知道是否有一个功能可以总结存储在我的阵列中的所有时间。 要么 我想,如果我将第一个值存储到一个临时文件,然后将临时值添加到数组的第二个值,这将给出我想要的结果但是基于时间我只尝试了一个整数

感谢您的进步。抱歉我的第一篇文章中缺少信息。

3 个答案:

答案 0 :(得分:0)

这样的东西?你的代码没有意义,这是我最好的解释。 (这是一种不好的方式。我们可以合并第一个循环。

for($i=0;$i<count($lang_val);$i++){
  $target_time = $project_time;
  $stored_time[] = $target_time; //Assuming this is a timestamp
}

$intTotalTime = 0;
foreach($stored_time as $intTimeStamp) {
  $intTotalTime += $intTimeStamp;
}
echo "Total Time: ". date("H:i:s", strtotime($intTotalTime));

答案 1 :(得分:0)

为什么要获得时间戳的总和?结果将是一个非常奇怪的数字。

我假设$ lang_val是一个带时间戳的数组。

$new = array();
foreach( $lang_val as $entry ) {
    $new[] = strtotime( $entry );
}

// Debugging
var_dump( $new );
// Actual value
var_dump( array_sum($new) );

$total = 0;
foreach( $lang_val as $entry ) {
    $total += strtotime( $entry );
}

发表评论后:

$data = array(
    '00:15:00',
    '01:05:05',
    '10:00:15'
);

$total = 0;
foreach( $data as $timestamp ) {
    // Get values or set default if not present.
    list( $hours, $minutes, $seconds ) = explode( ':', $data ) + array(
            0 => 0,
            1 => 0,
            2 => 0
    );

    // Convert to seconds
    $hours = $hours * 3600;
    $minutes = $minutes * 60;

    $total += $hours + $minutes + $seconds; 
}

var_dump( $total );

答案 2 :(得分:0)

您可以使用array_reducestrtotime

<?php

$array = array('00:10:15', '02:00:00', '05:30:00');

// Get total amount of seconds
$seconds = array_reduce($array, function($carry, $timestamp) {
        return $carry + strtotime('1970-01-01 ' . $timestamp);
}, 0);

// Get hours
$hours = floor($seconds/ 3600);
$seconds -= $hours * 3600;

// Get minutes
$minutes = floor($seconds/ 60);
$seconds -= $minutes * 60;

// Convert to timestamp
$timestamp = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);

var_dump($timestamp); //string(8) "07:40:15"

DEMO