【发布时间】:2015-10-15 04:55:30
【问题描述】:
假设我将代理存储在具有以下结构的多维数组中:
[Agent - 167] => Array
(
[0] => Array
(
[0] => 2015-07-17 00:01:51.417080
[1] => Agent - 167
[2] => LOGIN
)
[1] => Array
(
[0] => 2015-07-17 00:02:28.821206
[1] => Agent - 167
[2] => LOGOUT
)
[2] => Array
(
[0] => 2015-07-17 00:02:37.257944
[1] => Agent - 167
[2] => LOGIN
)
[3] => Array
(
[0] => 2015-07-21 07:16:51.457435
[1] => Agent - 167
[2] => LOGIN
)
[4] => Array
(
[0] => 2015-07-21 07:20:51.016638
[1] => Agent - 167
[2] => LOGOUT
)
)
我想计算每个代理的每个Login 和Logout 事件之间的时间差并获得汇总。这很简单,因为时间日志位于内部数组的第一个元素中,所以[0][0] = Time。该事件在第三个元素上。我的计算仅在以下事件为LOGOUT 且前一个事件为LOGIN 时有效。
但有时代理超时而不是注销连续记录两个 LOGIN 事件,我想跳过具有 LOGIN 事件的数组 IF 下一个数组也有LOGIN 事件并继续我的计算。
我正在使用下面的代码来执行我的计算:
foreach ($pse_array as $value) {
$total = 0;
for ($i = 0; $i < count($value); $i+=2) {
$srtTime = strtotime($value[$i][0]);
$endTime = strtotime($value[$i + 1][0]);
$interval = $endTime - $srtTime;
$total += $interval;
}
echo gmdate("H:i:s", $total) . " Minutes <br>";
}
我也知道我可以通过If statement 进行比较以检查事件是否符合我的标准,但我不确定如何跳过数组。
【问题讨论】:
-
加timeuot时间可能更好?
-
@splash58 可能是,但我无法重新设计系统。
-
$pse_array 是来自 var_dump 的数组?还是$value?
-
@splash58 是的。是多维数组的最外层数组。
-
先过滤数组,然后对过滤后的数组进行计算。这样代码看起来会干净很多。还需要检查在增加索引时不会超出数组长度。也可以在过滤器中执行此操作以删除最后一个不匹配的
LOGIN
标签: php arrays loops multidimensional-array