PHP - 多时差计算

时间:2016-04-29 22:10:25

标签: php mysql arrays wordpress

对于我的生活,我在互联网上找不到任何有关如何解决问题的文档。我已经看到了大量计算时间差异的方法,但我似乎无法将某些东西放在一起,这对我的情况有用。

我目前正在构建一个时间管理/票证系统,它是WordPress的插件。我使用自定义表而不是WordPress表。我有一个包含所有主要故障单信息的表和另一个包含所有开始/停止时间的表。一旦用户将票证标记为完成,它将获取所有开始/停止时间值并计算花费的总时间,然后将该总时间值放入主票证表中的“total_time”列。

我正在查询数据库并使用以下方式拉动开始/停止时间:
$start_times = $wpdb->get_results($start_times_query); $stop_times = $wpdb->get_results($stop_times_query);

现在我有2个数组的信息。这是我应该这样做的方式吗?

数组给我这个(开始时间): Array ( [0] => Array ( [time] => 2016-04-29 12:02:43 ) [1] => Array ( [time] => 2016-04-29 12:04:18 ) [2] => Array ( [time] => 2016-04-29 12:06:07 ) [3] => Array ( [time] => 2016-04-29 12:07:56 ) [4] => Array ( [time] => 2016-04-29 12:10:30 ) [5] => Array ( [time] => 2016-04-29 12:11:59 ) )

(结束时间格式相同)

然后我使用:

分解数组
$startTimes = array_column($startTimes, 'time');
$endTimes = array_column($endTimes, 'time');

现在它给了我这个数组(这个只是开始时间,但结束时的格式相同):

Array ( [0] => 2016-04-29 12:02:43 [1] => 2016-04-29 12:04:18 [2] => 2016-04-29 12:06:07 [3] => 2016-04-29 12:07:56 [4] => 2016-04-29 12:10:30 [5] => 2016-04-29 12:11:59 )

通常我可以通过所有值来foreach ($start_time as $time){}进行迭代,但是(如果我错了,请纠正我)我不能将两个数组放入foreach括号中,我不能放置另一个foreach语句在当前的一个,因为它将只返回第二个数组的所有时间,只返回第一个数组的一个值。我觉得我错过了一些简单的事情,我能做些什么来实现这个目标?

修改
感谢Scopey,我已经制定了一个while循环,但是它运行不正常。这就是我所拥有的:

$startTimes = array_column($startTimes, 'time');
$endTimes = array_column($endTimes, 'time');
while (($startTime = current($startTimes)) !== false && ($endTime = current($endTimes) !== false)) {

    $startTimesConv = strtotime($startTimes);
    $endTimesConv = strtotime($endTimes);
    $totalTime = ($startTimesConv - $endTimesConv)/60/60;

    next($startTimes);
    next($endTimes);
}

3 个答案:

答案 0 :(得分:0)

如果要同时循环两个数组,可以使用PHP函数通过操作其内部指针来遍历数组:#sidebar{ height: 420px; width: 10%; background-color: red; display:inline-block; } struct mat { var a: String var b: [Int] var c: Double } var subj = [mat]() current,{{ 1}}和next

你只需要做一个while循环:

reset

请参阅nextcurrent

的文档

答案 1 :(得分:0)

我会后退一步,查看查询本身。您正在尝试在数据库中相关的两次之间进行计算,但是,通过将时间分成两个单独的数组,关系会丢失。或者至少与数组索引模糊相关。

我的伪代码看起来像这样:

#For each ticket which is closed
  #Get an array (time entries) of arrays (start, stop) (each having it's start and stop time)
  #total_time = 0
  #For each time entry 
      #Perform a time calc function to get_time_differnce(start, stop)
      #Add the time to Total_time
  #Add total_time to ticket record in DB

如果您展示了更多细节,我可以扩展。 (即查询本身)

答案 2 :(得分:0)

使用for代替foreach迭代两个长度相同的常规数组:

$length = count($start_times);
for ($i = 0; $i < $length; $i++) {
    $start_time = $start_times[$i]["time"];
    $stop_time = $stop_times[$i]["time"];
    // do things
}

但在您的情况下,我强烈建议您计算SQL中的差异。