array_chunk不能降维,仅按数量切块;二维转一维应使用array_merge(...$arr)或call_user_func_array('array_merge', $arr)。

array_chunk 本身不支持二维转一维,别被函数名误导
array_chunk 的作用是「切块」,不是「降维」。它把一个数组按指定数量拆成多个子数组,维度不变:输入一维,输出仍是二维(由多个一维数组组成);输入二维,输出是三维(每个子数组里还包着原二维元素)。想靠它直接把 [['a','b'], ['c','d']] 变成 ['a','b','c','d'],行不通——它连 array_merge 都不干,更不会递归展开。
二维转一维的正确组合:array_merge(...$arr) 或 call_user_func_array
PHP 7.4+ 推荐用展开运算符:array_merge(...$arr)。前提是 $arr 是二维且每项都是一维数组:
php $arr2d = [['a', 'b'], ['c', 'd'], ['e']]; $result = array_merge(...$arr2d); // ['a','b','c','d','e']
PHP 5.6–7.3 可用 call_user_func_array('array_merge', $arr2d) 达到同样效果。注意:如果 $arr2d 中有非数组项(比如 null 或字符串),会报 Warning;空数组会被忽略,不影响结果。
需要“分批降维”时,才轮到 array_chunk 上场
真正需要 array_chunk 的场景是:先降维,再分批处理。例如导出大量数据,每 100 条打包一次:
立即学习“PHP免费学习笔记(深入)”;
- 先用
array_merge(...$data2d)得到完整一维数组 - 再用
array_chunk($flat, 100)切成每组 100 个元素的批次 - 避免在循环里反复调用
array_merge,否则性能暴跌
错误做法:对每个二维子数组单独 array_chunk 再拼接——这既没降维,也没真正分批,纯属混淆逻辑。
遇到不规则二维数组(含空/非数组项)要先过滤
如果原始二维数组可能含 null、false、字符串或深度 >2 的嵌套,直接 array_merge(...$arr) 会出错或结果异常。稳妥做法:
- 用
array_filter($arr2d, 'is_array')剔除非数组项 - 用
array_values重置键名,避免展开运算符跳过数字键缺失项 - 必要时加
array_map('array_values', $filtered)统一子数组键名
降维本身不难,难的是你手里的二维数组到底“规不规矩”——这点常被跳过,然后卡在莫名其妙的 Warning 上。










