不同长度的PHP数组比较
我需要比较两个数组的值,它们的大小并不总是相同的,每个数组包含一个登录或注销时间。我需要获取这些值之间的总时差或登录时间。我被抓到的地方是注销结果通常比登录结果小。我尝试了以下方法,但一点也不准确不同长度的PHP数组比较,php,arrays,comparison,Php,Arrays,Comparison,我需要比较两个数组的值,它们的大小并不总是相同的,每个数组包含一个登录或注销时间。我需要获取这些值之间的总时差或登录时间。我被抓到的地方是注销结果通常比登录结果小。我尝试了以下方法,但一点也不准确 $offset = 0; for($i=0;$i<sizeof($login_ary);$i++){ //unset($time_logged); $time_logged = Array(); while( (int)$login_ary[$i] > (int)$
$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";
$offset=0;
对于($i=0;$i(int)$logout_ary[$i]){
$offset++;
}
$time\u logged['login']=$login\u ary[$i]+$offset;
$time_logged['logout']=$logout_ari[$i];
$calc_ari[]=$time_logged;
}
$time\u logged\u in=“未定义”;
最终结果我需要得到一个带有排队登录/注销的数组,或者计算登录时间和注销时间之间的总时间差。但我必须排除没有关联注销的登录
编辑
1) 数组中的时间是unix时间戳
2) 数组不是静态的,因为这是在一个循环中为结果集中的每个用户完成的,所以var_转储看起来如下所示
登录地址
数组([0]=>“1385402632”、[1]=>“1385763384”、[2]=>“1387293992”)
注销
数组([0]=>“1387294012”)
**我的解决方案**
我的解决方案脱离了原始问题的上下文,这就是为什么我将其作为编辑而不是答案发布的原因。但这就是我所做的,它的简单性让我觉得自己当初没有想到它是愚蠢的。我所做的是,将会话超时写入注销文件中,因为数据将不显示,否则,我们决定伪造时间比完全避免时间更好。因此,我计算了登录时间并伪造了注销时间,并在同一点将其拼接到数组中。我仍然想知道这个问题的真正答案,如果有的话
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;
}
for($i=0;$i(int)$logout\u ary[$i]){
数组拼接($logout_ary,$i,0,$login_ary[$i]+$session_长度);
$time_logged['login']=$login_ary[$i];
$time_logged['logout']=$logout_ari[$i];
}否则{
$time_logged['login']=$login_ary[$i];
$time_logged['logout']=$logout_ari[$i];
}
$calc_ari[]=$time_logged;
}
这两个数组中究竟存储了什么?只是时间变量?你怎么知道登录时间是注销时间的登录时间?还有,为什么不把日志超时-及时登录以获得时间差呢?只要看看评论,我想这可能就是你想要的评论,我可以看看我是否能提供更多帮助
<?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;
}
}
?>
从数据库获取数据时,是否可以进行此计算?能否发布这些数组的var\u dump
示例,以便我们更好地了解它们的结构?这将有助于澄清您的问题,让我们更好地回答您的问题。具体来说,我们需要知道时间是以什么格式保存的。我会假设一个unix时间戳,但它可以是任何东西:H:I:s
,H:I:s
或其他东西。澄清会有帮助的。我看到你的更新,谢谢。在示例$login\u arr
中,每个元素是不同用户的登录时间戳,还是一个用户的登录时间戳的集合?由于登录和注销的数量不均衡,我假设是后者?如果是这种情况,元素$login\u arr[0]
和$logout\u arr
是同一用户的登录/注销时间吗?@Darragh是的,它只针对一个用户,如果他们让会话过期,注销并不总是存在Q1)是的,只是时间变量q2)你不。。。q3)必须确保登录时间不大于注销时间time@Grimnoff这似乎是行不通的,如果每次都与用户id无关,那么就无法将登录与注销匹配起来。这似乎适得其反。我认为,使这项工作将有一个相关联的用户(登录id)与登录和注销时间相关联。为了确保登录时间不大于注销时间,只需使用如下比较:if(log_in[i]