PHP 数组数据拆分与合并思路

2次阅读

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

PHP 数组数据拆分与合并思路

PHP 中数组的拆分与合并,核心在于明确操作目标:是按数量均分、按条件筛选拆分,还是按键名/索引/值规则合并。不依赖复杂函数也能高效完成,关键是理解 array_chunkarray_mergearray_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]]

按条件逻辑动态拆分

当需要根据元素属性(如状态、类型)归类时,手动遍历 + 分组更灵活:

  • 初始化多个空数组,遍历原数组,用 if/elseswitch 判断归属并 []= 追加
  • 例如按用户等级拆分:$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()(仅限一维数值/字符串)
text=ZqhQzanResources