为了账号安全,请及时绑定邮箱和手机立即绑定

求助,PHP处理三维数组

求助,PHP处理三维数组

PHP
人到中年有点甜 2019-03-10 13:35:11
原始数组: $arr = Array( '11' => Array( '1' => Array( 'sortid' => '6', 'driverid' => '1003', 'carsid' => '11', 'lineid' => '2', 'gettime' => '2018-01-19 10:00:00', 'comments' => '' ), '2' => Array( 'sortid' => '2', 'driverid' => '1000', 'carsid' => '11', 'lineid' => '1', 'gettime' => '2018-01-19 10:03:31', 'comments' => '' ), '4' => Array( 'sortid' => '9', 'driverid' => '1001', 'carsid' => '11', 'lineid' => '5', 'gettime' => '2018-01-19 12:48:54', 'comments' => '' ), '6' => Array( 'sortid' => '4', 'driverid' => '1001', 'carsid' => '11', 'lineid' => '2', 'gettime' => '2018-01-19 14:47:50', 'comments' => '' ), '7' => Array( 'sortid' => '5', 'driverid' => '1001', 'carsid' => '11', 'lineid' => '2', 'gettime' => '2018-01-19 14:48:07', 'comments' => '' ), '8' => Array( 'sortid' => '7', 'driverid' => '1006', 'carsid' => '11', 'lineid' => '5', 'gettime' => '2018-01-19 14:48:29', 'comments' => '' ), '10' => Array( 'sortid' => '10', 'driverid' => '1003', 'carsid' => '11', 'lineid' => '5', 'gettime' => '2018-01-19 14:49:05', 'comments' => '' ), ), '10' => Array( '3' => Array( 'sortid' => '1', 'driverid' => '1000', 'carsid' => '10', 'lineid' => '1', 'gettime' => '2018-01-19 11:47:15', 'comments' => '' ), '5' => Array( 'sortid' => '3', 'driverid' => '1000', 'carsid' => '10', 'lineid' => '1', 'gettime' => '2018-01-19 14:47:40', 'comments' => '' ), '12' => Array( 'sortid' => '12', 'driverid' => '1001', 'carsid' => '10', 'lineid' => '1', 'gettime' => '2018-01-19 14:49:17', 'comments' => '' ), ), '12' => Array( '9' => Array( 'sortid' => '8', 'driverid' => '1001', 'carsid' => '12', 'lineid' => '5', 'gettime' => '2018-01-19 14:48:46', 'comments' => '' ), '11' => Array( 'sortid' => '11', 'driverid' => '1006', 'carsid' => '12', 'lineid' => '1', 'gettime' => '2018-01-19 14:49:12', 'comments' => '' ), ), '13' => Array( '13' => Array( 'sortid' => '13', 'driverid' => '1001', 'carsid' => '12', 'lineid' => '5', 'gettime' => '2018-01-19 12:48:46', 'comments' => '' ), '14' => Array( 'sortid' => '14', 'driverid' => '1006', 'carsid' => '12', 'lineid' => '1', 'gettime' => '2018-01-19 14:49:12', 'comments' => '' ), ), ); 三维数组的要求是:三位数组的第三位维的相邻的gettime键值的差如果大于600秒,就返回其sortid键的值。处理后的数组如下: $arrs = array( '11' => array( array(6,2), array(4,5,7,10), ), '10' => array( array(3,12), ), '12' => array( array(8,11) ), ); 多谢各位大牛!
查看完整描述

4 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

[1]保留key
$aDelArr = [];
foreach($arr as $key => $aFValue)
{
    $i = 0;
    $iPreTime = 0;
    foreach($aFValue as $iNode => $aV)
    {
        $iTime = strtotime($aV['gettime']);
        $iSubTime = $iTime - $iPreTime;
        if($iSubTime > 600 && !empty($aDelArr[$key][$i]))
        {
            $i++;
        }
        $aDelArr[$key][$i][$iNode] = $aV['sortid'];
        $iPreTime = $iTime;
    }
}
[2]修改原数组
foreach($arr as $key => &$aValue)
{
    $aTemp = [];
    $iPreTime = 0;
    foreach($aValue as $aV)
    {
        $iTime = strtotime($aV['gettime']);
        $iSubTime = $iTime - $iPreTime;
        if($iSubTime > 600)
        {
            $aTemp[] = [];
        }
        $aTemp[count($aTemp) - 1][] = $aV['sortid'];
        $iPreTime = $iTime;
    }
    $aValue = $aTemp;
}
查看完整回答
反对 回复 2019-03-18
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

看了要求和结果,怎么好像不太对,为什么不是'10'=>array( array(1,3))

查看完整回答
反对 回复 2019-03-18
?
呼如林

TA贡献1798条经验 获得超3个赞

首先遍历一下这个三维数组,在循环中判断相邻gettime键值的差,如果大于600秒,最后返回sortid键的值,就是这三个点,第二个比较难点.

查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 512 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信