对于我的生活,我在互联网上找不到任何有关如何解决问题的文档。我已经看到了大量计算时间差异的方法,但我似乎无法将某些东西放在一起,这对我的情况有用。
我目前正在构建一个时间管理/票证系统,它是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);
}
答案 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
的文档
答案 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中的差异。