PHP数组自动按数量分组

2019-03-05 15:44:25 总阅读量:60,本日阅读:1,本周阅读:5,本月阅读:60 0条

很好用的一个函数

/**
 * 把数组自动按数量分组
 * @param array $array 要分割的数组
 * @param int $groupNum 分的组数
 */
function splitArray($array, $groupNum)
{
    if (empty($array)) {
        return array();
    }
    //数组的总长度
    $allLength = count($array);
    //个数
    $groupNum = intval($groupNum);
    //开始位置
    $start = 0;
    //分成的数组中元素的个数
    $enum = (int)($allLength / $groupNum);
    //结果集
    $result = array();
    if ($enum > 0) {
        //被分数组中 能整除 分成数组中元素个数 的部分
        $firstLength = $enum * $groupNum;
        $firstArray = array();
        for ($i = 0; $i < $firstLength; $i++) {
            array_push($firstArray, $array[$i]);
            unset($array[$i]);
        }
        for ($i = 0; $i < $groupNum; $i++) {
            //从原数组中的指定开始位置和长度 截取元素放到新的数组中
            $result[] = array_slice($firstArray, $start, $enum);
            //开始位置加上累加元素的个数
            $start += $enum;
        }
        //数组剩余部分分别加到结果集的前几项中
        $secondLength = $allLength - $firstLength;
        for ($i = 0; $i < $secondLength; $i++) {
            array_push($result[$i], $array[$i + $firstLength]);
        }
    } else {
        for ($i = 0; $i < $allLength; $i++) {
            $result[] = array_slice($array, $i, 1);
        }
    }
    return $result;
}

测试1-50分3组

$arr = range(1, 50);
print_r(splitArray($arr, 3));

结果

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
            [6] => 7
            [7] => 8
            [8] => 9
            [9] => 10
            [10] => 11
            [11] => 12
            [12] => 13
            [13] => 14
            [14] => 15
            [15] => 16
            [16] => 49
        )
    [1] => Array
        (
            [0] => 17
            [1] => 18
            [2] => 19
            [3] => 20
            [4] => 21
            [5] => 22
            [6] => 23
            [7] => 24
            [8] => 25
            [9] => 26
            [10] => 27
            [11] => 28
            [12] => 29
            [13] => 30
            [14] => 31
            [15] => 32
            [16] => 50
        )
    [2] => Array
        (
            [0] => 33
            [1] => 34
            [2] => 35
            [3] => 36
            [4] => 37
            [5] => 38
            [6] => 39
            [7] => 40
            [8] => 41
            [9] => 42
            [10] => 43
            [11] => 44
            [12] => 45
            [13] => 46
            [14] => 47
            [15] => 48
        )
)
标签 PHP 数组

非特殊说明,本博所有文章均为博主原创。

-----