猿问

求助,PHP处理三维数组

原始数组:

$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)
    ),
);

多谢各位大牛!

人到中年有点甜
浏览 537回答 4
4回答

喵喔喔

[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; }

沧海一幻觉

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

呼如林

首先遍历一下这个三维数组,在循环中判断相邻gettime键值的差,如果大于600秒,最后返回sortid键的值,就是这三个点,第二个比较难点.
随时随地看视频慕课网APP
我要回答