php数组拆分与合并需据目标选择方法:按数量用array_chunk(键重置),按条件遍历分组;合并时array_merge数字键重排、字符串键后者覆盖,+运算符保留左键,array_replace全键后者覆盖,递归合并用array_replace_recursive。

PHP 中数组的拆分与合并,核心在于明确操作目标:是按数量均分、按条件筛选拆分,还是按键名/索引/值规则合并。不依赖复杂函数也能高效完成,关键是理解 array_chunk、array_merge、array_replace、+ 运算符等行为差异。
按固定数量拆分成子数组
适合分页、批量处理等场景。用 array_chunk() 最直接,它会按指定大小切分原数组,末尾不足的部分自动成一组:
-
$chunks = array_chunk($arr, 3);—— 每组最多 3 个元素 - 注意:键名会被重置为数字索引(0,1,2…),若需保留原始键,可配合
array_slice()手动循环实现 - 例如处理用户ID列表:
array_chunk([101,102,103,104,105], 2)得到[[101,102],[103,104],[105]]
按条件逻辑动态拆分
当需要根据元素属性(如状态、类型)归类时,手动遍历 + 分组更灵活:
DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。
- 初始化多个空数组,遍历原数组,用
if/else或switch判断归属并[]=追加 - 例如按用户等级拆分:
$vip = []; $normal = [];,循环中if ($user['level'] === 'vip') $vip[] = $user; - 也可用
array_filter()配合回调函数分别提取,但多次遍历效率略低
合并多个数组的几种方式及区别
不同合并方式对重复键的处理完全不同,选错会导致数据被意外覆盖或丢失:
立即学习“PHP免费学习笔记(深入)”;
-
array_merge($a, $b):数字键重排,字符串键后者覆盖前者;[0=>'a'] + [0=>'b']结果是[0=>'a'] -
$a + $b(+ 运算符):只保留左数组键,右数组同键不覆盖;适合“默认配置 + 用户配置”场景 -
array_replace($a, $b):字符串键和数字键都以后者为准,不重排索引;比array_merge更接近“覆盖式合并”语义
合并时保留多维结构或去重需求
普通合并无法自动递归或去重,需额外处理:
- 递归合并用
array_replace_recursive(),适合配置数组嵌套场景 - 合并后去重:先
array_merge(),再用array_unique()(注意需加SORT_REGULAR处理多维) - 若要合并并统计频次,可用
array_merge(...$arrays)后配合array_count_values()(仅限一维数值/字符串)










