
本文介绍使用 array_splice() 配合布尔切换逻辑,将一维数组按 3、2、3、2… 的规律分块,生成嵌套二维数组,适用于分页展示、布局分组等场景。
在 PHP 开发中,有时需要对数组进行非均匀分块——例如按「3 个元素 → 2 个元素 → 3 个元素 → 2 个元素」的交替模式切分。这不同于 array_chunk() 的固定长度分块,需手动控制每次截取数量。
核心思路是:利用 array_splice($array, 0, $length) 原地移除并返回指定长度的前缀子数组,再通过布尔标志 $step 动态切换长度(true 时取 3,false 时取 2),循环直至原数组为空。
以下是完整可运行示例:
<?php
$array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$out = [];
$step = true; // 控制当前轮次取 3 还是 2
while (!empty($array)) {
$chunkLength = $step ? 3 : 2;
$out[] = array_splice($array, 0, $chunkLength);
$step = !$step; // 切换下一轮长度
}
print_r($out);
?>输出结果:
立即学习“PHP免费学习笔记(深入)”;
Array
(
[0] => Array ( [0] => 1 [1] => 2 [2] => 3 )
[1] => Array ( [0] => 4 [1] => 5 )
[2] => Array ( [0] => 6 [1] => 7 [2] => 8 )
[3] => Array ( [0] => 9 [1] => 10 )
)✅ 关键优势:
- array_splice() 直接修改原数组并返回子段,避免额外索引计算;
- 布尔切换简洁高效,易于扩展为其他交替模式(如 4/2、3/3/2 等);
- 时间复杂度为 O(n),空间开销可控。
⚠️ 注意事项:
- 原数组 $array 会被清空,若需保留原始数据,请先用 $temp = $array; 复制;
- 当剩余元素不足所需长度时,array_splice() 自动返回剩余全部元素(不会报错或补空值),符合预期行为;
- 若需更灵活的模式(如 [3,2,3,2,3] 后终止),可将长度序列定义为数组并使用指针迭代。
此方法兼顾可读性与实用性,是处理周期性变长分块任务的推荐方案。











