Split an Array into N Arrays - PHP

前端 未结 11 1792
一向
一向 2020-12-05 07:05

I have an array of 18 values:

$array = array(\'a\', \'b\', \'c\', \'d\', \'e\', \'f\', \'g\', \'h\', \'i\', \'j\', \'k\', \'l\', \'m\', \'n\', \'o\', \'p\',          


        
11条回答
  •  北荒
    北荒 (楼主)
    2020-12-05 07:47

    This simple function would work for you:

    Usage

    $array = range("a", "r"); // same as your array
    print_r(alternate_chunck($array,12));
    

    Output

    Array
    (
        [0] => Array
            (
                [0] => a
                [1] => b
            )
    
        [1] => Array
            (
                [0] => c
                [1] => d
            )
    
        [2] => Array
            (
                [0] => e
                [1] => f
            )
    
        [3] => Array
            (
                [0] => g
                [1] => h
            )
    
        [4] => Array
            (
                [0] => i
                [1] => j
            )
    
        [5] => Array
            (
                [0] => k
                [1] => l
            )
    
        [6] => Array
            (
                [0] => m
            )
    
        [7] => Array
            (
                [0] => n
            )
    
        [8] => Array
            (
                [0] => o
            )
    
        [9] => Array
            (
                [0] => p
            )
    
        [10] => Array
            (
                [0] => q
            )
    
        [11] => Array
            (
                [0] => r
            )
    
    )
    

    Update The above might not be useful for most cases ... here is another type of chunk

    $array = range("a", "r"); // same as your array
    print_r(fill_chunck($array, 5));
    

    Output

    Array
    (
        [0] => Array
            (
                [0] => a
                [1] => b
                [2] => c
                [3] => d
            )
    
        [1] => Array
            (
                [0] => e
                [1] => f
                [2] => g
                [3] => h
            )
    
        [2] => Array
            (
                [0] => i
                [1] => j
                [2] => k
                [3] => l
            )
    
        [3] => Array
            (
                [0] => m
                [1] => n
                [2] => o
                [3] => p
            )
    
        [4] => Array
            (
                [0] => q
                [1] => r
            )
    
    )
    

    This would make sure the group at no time is more that 5 elements where the other one has no limitation

    Function Used

    function alternate_chunck($array, $parts) {
        $t = 0;
        $result = array();
        $max = ceil(count($array) / $parts);
        foreach(array_chunk($array, $max) as $v) {
            if ($t < $parts) {
                $result[] = $v;
            } else {
                foreach($v as $d) {
                    $result[] = array($d);
                }
            }
            $t += count($v);
        }
        return $result;
    }
    
    
    function fill_chunck($array, $parts) {
        $t = 0;
        $result = array_fill(0, $parts - 1, array());
        $max = ceil(count($array) / $parts);
        foreach($array as $v) {
            count($result[$t]) >= $max and $t ++;
            $result[$t][] = $v;
        }
        return $result;
    }
    

提交回复
热议问题