猿问

php 二维数组 怎么获取不同值对应的时间差

$arr=[
'0'=>['a1'=>'true','time'=>1537861731],
'1'=>['a1'=>'false','time'=>1541035671],
'2'=>['a1'=>'true','time'=>1541036000],
'3'=>['a1'=>'true','time'=>1541036010]
'4'=>['a1'=>'false','time'=>1541036020]
];
true:接通;
false:未接通;
true到false的时间是接通时间;
false到true的是未接通时间;
结果:想获取所有的接通时间。
就是用false对应的时间戳减去前面的为true的时间戳。
这个试例中的就只能用1减去0的时间,4减去2的时间。
循环该怎么写,求助大神。
跃然一笑
浏览 474回答 2
2回答

蝴蝶不菲

从你这段数组上感觉你对于通话时长,这段业务处理的很奇怪(指的是数组的形成方式)。通过下面的代码应该可以得到你想要的结果:$true_key=null;$times=[];foreach($arras$key=>$value){if($value['a1']=='true'){//记录true第一次出现时的下标if($true_key===null){$true_key=$key;}continue;}/***记录*/if(($value['a1']=='false')&&($true_key!==null)){$times[]=$value['time']-$arr[$true_key]['time'];$true_key=null;}}

扬帆大鱼

先把true和false拆开放在两组。然后遍历为true的一组。并同时对为false的一组进行迭代。每次迭代对游标向前推进如果当前的结束时间不为null就用结束时间减去开始时间,即为本次连接时间。$arr=[['a1'=>'true','time'=>1537861731],['a1'=>'false','time'=>1541035671],['a1'=>'true','time'=>1541036000],['a1'=>'true','time'=>1541036010],['a1'=>'false','time'=>1541036020]];$start=[];$finish=[];foreach($arras$item){if($item['a1']==='true'){array_push($start,$item);continue;}array_push($finish,$item);}$result=array_map(function($item)use(&$finish){$current=current($finish);next($finish);if($current){return$current['time']-$item['time'];}},$start);var_dump($result);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答