php 7.1中二维数组扁平化推荐用array_merge(...$arr),要求子项全为数组;结构不规则时可用foreach加is_array判断;函数式写法用array_reduce配合强制转数组,三者均生成数字索引一维数组,关联键丢失。

PHP 7.1 中将二维数组扁平化,核心是把嵌套一层的子数组(如 [['a','b'], ['c'], ['d','e','f']])合并成一个一维数组(如 ['a','b','c','d','e','f'])。这不是递归降维,仅限“二维→一维”,方法简洁高效,无需第三方库。
用 array_merge() 配合解包操作符(推荐)
PHP 7.1 已支持 ... 解包语法,可直接展开二维数组的每个子数组,再由 array_merge() 合并:
- 写法:
$flat = array_merge(...$twoDArray); - 要求:
$twoDArray必须是索引数组,且每个子项也是数组(不能含字符串、null 等非数组值) - 示例:
php
$data = [['apple', 'banana'], ['cherry'], ['date', 'elderberry', 'fig']];
$result = array_merge(...$data);
print_r($result);
// 输出:Array ( [0] => apple [1] => banana [2] => cherry [3] => date [4] => elderberry [5] => fig )
?>
用 foreach 循环逐个合并(兼容性更强)
若数组结构不规则(比如含空值、非数组元素),或需加判断逻辑,用循环更稳妥:
- 初始化空数组
$flat = []; - 遍历原二维数组,对每个子项做
is_array()判断后再array_merge()或array_push() - 示例:
$data = [['x','y'], null, ['z'], [1,2]];
$flat = [];
foreach ($data as $sub) {
if (is_array($sub)) {
$flat = array_merge($flat, $sub);
}
}
print_r($flat); // Array ( [0] => x [1] => y [2] => z [3] => 1 [4] => 2 )
?>
用 array_reduce() 实现函数式写法
适合喜欢函数式风格的场景,逻辑清晰,一行主干:
- 写法:
$flat = array_reduce($twoDArray, function($carry, $item) { return array_merge($carry, (array)$item); }, []); - 说明:强制将每个
$item转为数组(避免 null 或字符串报错),初始值为空数组 - 优势:天然跳过非数组项,不易出错;代码紧凑,便于封装复用
注意键名丢失与关联键处理
上述所有方法默认生成数字索引的一维数组,原关联键(如 ['user'=>['name'=>'A']])会被丢弃。如需保留键信息,不能直接扁平化,应改用 array_walk_recursive() 提取值,或手动构建带前缀的新键名:
- 例如:
$flat['user_name'] = $arr['user']['name']; -
array_walk_recursive()只提取叶子值,不保留路径,适用于纯数据提取场景
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











