首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组拆分为特定数量的块

问将数组拆分为特定数量的块
EN

Stack Overflow用户
提问于 2013-03-31 04:19:40
回答 7查看 30.8K关注 0票数 21

我知道array_chunk()允许将一个数组分成几个块,但块的数量会根据元素的数量而变化。我需要的是始终将数组拆分为特定数量的数组,例如4个数组。

下面的代码将数组分成3个块,两个块各有2个元素,1个块有1个元素。我想要的是始终将数组拆分为4个块,而不管数组的元素总数是多少,但始终尝试像array_chunck函数那样在块中均匀地划分元素。我如何才能做到这一点呢?有没有什么PHP函数可以解决这个问题?

代码语言:javascript
复制
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));

谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-03-31 04:40:50

你可以试试

代码语言:javascript
复制
$input_array = array(
        'a',
        'b',
        'c',
        'd',
        'e'
);

print_r(partition($input_array, 4));

输出

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
        )

    [2] => Array
        (
            [0] => d
        )

    [3] => Array
        (
            [0] => e
        )

)

使用的函数

代码语言:javascript
复制
/**
 * 
 * @param Array $list
 * @param int $p
 * @return multitype:multitype:
 * @link http://www.php.net/manual/en/function.array-chunk.php#75022
 */
function partition(Array $list, $p) {
    $listlen = count($list);
    $partlen = floor($listlen / $p);
    $partrem = $listlen % $p;
    $partition = array();
    $mark = 0;
    for($px = 0; $px < $p; $px ++) {
        $incr = ($px < $partrem) ? $partlen + 1 : $partlen;
        $partition[$px] = array_slice($list, $mark, $incr);
        $mark += $incr;
    }
    return $partition;
}
票数 53
EN

Stack Overflow用户

发布于 2013-03-31 04:28:33

将数组的大小除以所需的区块数量,并将其作为每个区块的大小提供。

代码语言:javascript
复制
function array_chunks_fixed($input_array, $chunks=3 /*Default chunk size 3*/) {
    if (sizeof($input_array) > 0) {        
        return array_chunk($input_array, intval(ceil(sizeof($input_array) / $chunks)));
    }

    return array();
}

然后这样叫它:

代码语言:javascript
复制
array_chunks_fixed($myarray, 2); //override the default number of '3'
票数 5
EN

Stack Overflow用户

发布于 2019-08-20 21:09:46

这里有很多复杂的答案。我将发布我的简单解决方案:)

代码语言:javascript
复制
function splitMyArray(array $input_array, int $size, $preserve_keys = null): array
{
    $nr = (int)ceil(count($input_array) / $size);

    if ($nr > 0) {
        return array_chunk($input_array, $nr, $preserve_keys);
    }

    return $input_array;
}

用法:

代码语言:javascript
复制
$newArray = splitMyArray($my_array, 3);

有关更多详细信息,请访问: https://zerowp.com/split-php-array-in-x-equal-number-of-elements/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15723059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档