鍍金池/ 問答/PHP/ php數(shù)組處理

php數(shù)組處理

$arr = [
    ['num' => -1],
    ['num' => 1],
    ['num' => 2],
    ['num' => 3],
    ['num' => 8],
    ['num' => 9],
    ['num' => 10],
    ['num' => 11],
    ['num' => 20],
    ['num' => 21],
    ['num' => 22],
    ['num' => 25],
    ['num' => 30],
    ['num' => 31],
    ['num' => 32],
    ['num' => 100],
];

現(xiàn)在的要求是,如果數(shù)組中num值相減大于1的話,就給它分割成一個新的數(shù)組,處理成這樣:

$arr = [
    [
        ['num' => -1],
    ],
    [
        ['num' => 1],
        ['num' => 2],
        ['num' => 3],
    ],
    [
        ['num' => 8],
        ['num' => 9],
        ['num' => 10],
        ['num' => 11],
    ],
    [
        ['num' => 20],
        ['num' => 21],
        ['num' => 22],
    ],
    [
        ['num' => 25]
    ],
    [
        ['num' => 30],
        ['num' => 31],
        ['num' => 32],
    ],
    [
        ['num' => 100],
    ]
];

想請教下,用PHP該怎么處理?

回答
編輯回答
夏夕

至少for循環(huán)還是能想到..

function continuous($arr, $field = "num")
{
    $result = [];
    $temp = [
        $arr[0],
    ];
    for ($i = 1; $i < count($arr); $i++) {
        $prev = $arr[$i - 1][$field];
        $now = $arr[$i][$field];
        if ($now - $prev == 1) {
            $temp[] = $arr[$i];
        } else {
            if ($temp) {
                $result[] = $temp;
            }
            $temp = [$arr[$i]];
        }
    }
    if(!empty($temp)) {
        $result[] = $temp;
    }
    
    return $result;
}
2018年1月20日 01:40