php数组处理

沐言
  • 190
$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],
];

现在的要求是,如果数组中num值相减大于1的话,就给它分割成一个新的数组,处理成这样:

$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该怎么处理?

回复
阅读 793
1 个回答

至少for循环还是能想到..

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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏