我知道array_chunck允许将一个数组拆分成几个chuncks,但是chuncks的数量根据元素的数量而变化.我需要的是总是将数组分成特定数量的数组,例如4个数组.
下面的代码将数组拆分为3个chuncks,两个chuncks,每个包含2个元素,1个chunch包含1个元素.我想要的是将数组总是分成4个chuncks,无论数组的总元素数是多少,但总是试图在数组中使用像array_chunck函数那样均匀地划分元素.我怎么能做到这一点?这有什么PHP功能吗?
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));
Run Code Online (Sandbox Code Playgroud)
谢谢.
Bab*_*aba 45
你可以试试
$input_array = array(
'a',
'b',
'c',
'd',
'e'
);
print_r(partition($input_array, 4));
Run Code Online (Sandbox Code Playgroud)
产量
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
)
[2] => Array
(
[0] => d
)
[3] => Array
(
[0] => e
)
)
Run Code Online (Sandbox Code Playgroud)
使用的功能
/**
*
* @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;
}
Run Code Online (Sandbox Code Playgroud)
将数组的大小除以所需的块数,并将其作为每个块的大小提供。
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();
}
Run Code Online (Sandbox Code Playgroud)
并这样称呼它:
array_chunks_fixed($myarray, 2); //override the default number of '3'
Run Code Online (Sandbox Code Playgroud)
这里有很多复杂的答案。我会发布我的简单解决方案:)
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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
$newArray = splitMyArray($my_array, 3);
Run Code Online (Sandbox Code Playgroud)
更多细节在这里: https : //zerowp.com/split-php-array-in-x-equal-number-of-elements/