不同长度的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]