我需要比较2个不一样大小的数组的值,每个数组都包含登录时间或注销时间。我需要在这些值之间记录总时间或时间。我被抓到的地方是注销结果通常小于登录。我尝试了以下但是它根本不准确。
$offset = 0;
for($i=0;$i<sizeof($login_ary);$i++){
//unset($time_logged);
$time_logged = Array();
while( (int)$login_ary[$i] > (int)$logout_ary[$i] ) {
$offset++;
}
$time_logged['login'] = $login_ary[$i] + $offset;
$time_logged['logout'] = $logout_ary[$i];
$calc_ary[] = $time_logged;
}
$time_logged_in = "undefined";
最终结果我需要获得一个带有排队登录/注销的数组,或者计算登录时间和注销时间之间的总时差。但我必须排除没有关联注销的登录。
编辑
1)数组内部的时间是unix时间戳 2)数组不是静态的,因为这是在结果集中的每个用户的循环内完成的,因此var_dump看起来像下面这样
login_arr
数组([0] =&gt;'1385402632',[1] =&gt;'1385763384',[2] =&gt;'1387293992')
logout_arr
数组([0] =&gt;'1387294012')
**我的解决方案**
我的解决方案脱离了原始问题的背景,这就是我将其作为编辑而不是答案发布的原因。但这就是我所做的,它的简单性使我感到愚蠢,我最初没有想到它。我所做的是将会话超时写入logout_ary,因为数据将无法表示,否则,我们认为捏造时间更好然后完全避免它。所以我花了登录时间并捏造了一个注销时间,并在同一点将它拼接到数组中。如果有这个问题,我仍然想知道这个问题的真正答案。
for($i=0;$i<sizeof($login_ary);$i++){
//unset($time_logged);
$time_logged = Array();
if( (int)$login_ary[$i] > (int)$logout_ary[$i] ) {
array_splice($logout_ary,$i,0,$login_ary[$i]+$session_length);
$time_logged['login'] = $login_ary[$i];
$time_logged['logout'] = $logout_ary[$i];
} else {
$time_logged['login'] = $login_ary[$i];
$time_logged['logout'] = $logout_ary[$i];
}
$calc_ary[] = $time_logged;
}
答案 0 :(得分:0)
两个数组中究竟存储了什么?只是时间变量?如何说login_ary [i]是log_out [i]时间的登录时间,你怎么知道?另外,为什么不采用log_out时间 - log_in时间来获得时间差?
答案 1 :(得分:0)
请阅读评论,我认为这可能是您评论后的内容,我可以看看我是否可以提供更多帮助。
<?php
function calcTime($login_ary, $loutout_ary) {
$login_ary_length = sizeof($login_ary);
$logout_ary_length = sizeof($logout_ary);
if($login_ary_length != $logout_ary_length) {
$diff = $login_ary_length - $logout_ary_length;
//just find the code that suits your format and put it in the function strtotime()
$timestamp = strtotime('TODAYS DATE AND TIME');
//for the amount of diff we add todays date and time to the array so that they are eqal
for(i=0; i<=$diff; i++) {
array_push($logout_ary, $timestamp);
}
//I'm going to leave this for you to do.
return $total_hours;
}
}
?>
我希望这是你正在寻找的东西。