You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多维数组按u、v、w键分组合并其余键值

PHP多维数组按指定键合并相同元素的其余键值

需求说明

当多维数组中元素的u、v、w键值完全相同时,合并其余键(x、y、z)的取值,用逗号分隔。

示例输入数组

$myarray = array (
  '0' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '30', 
      'y' => '16', 
      'z' => '22',  
),
  '1' => 
    array (
      'u' => '32', 
      'v' => '25', 
      'w' => '1',        
      'x' => '30', 
      'y' => '16', 
      'z' => '22',
),   
  '2' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '54', 
      'y' => '96', 
      'z' => '2',
),   
  '3' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '3', 
      'y' => '1', 
      'z' => '6',
)    
);

期望输出数组

// OUTPUT
array (
  '0' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '30,54,3', 
      'y' => '16,96,1', 
      'z' => '22,2,6',  
),
  '1' => 
    array (
      'u' => '32', 
      'v' => '25', 
      'w' => '1',        
      'x' => '30', 
      'y' => '16', 
      'z' => '22',
)   
)

原代码问题分析

用户的尝试代码存在两个核心问题:

  • 仅对比输出数组的最后一个元素,无法处理非连续出现的相同u/v/w组合元素;
  • 使用$output += $row的方式错误,这只会用新数组的键覆盖已有键,而非合并对应的值。

正确实现方法

通过构建唯一分组键的方式来处理:将每个元素的u、v、w值拼接成字符串作为临时数组的键,以此区分不同分组。遍历原数组时,将相同分组的x、y、z值逐步拼接,最后将临时数组转为普通索引数组即可。

<?php
$myarray = array (
  '0' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '30', 
      'y' => '16', 
      'z' => '22',  
),
  '1' => 
    array (
      'u' => '32', 
      'v' => '25', 
      'w' => '1',        
      'x' => '30', 
      'y' => '16', 
      'z' => '22',
),   
  '2' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '54', 
      'y' => '96', 
      'z' => '2',
),   
  '3' => 
    array (
      'u' => '30', 
      'v' => '16', 
      'w' => '22',        
      'x' => '3', 
      'y' => '1', 
      'z' => '6',
)    
);

$temp = [];
foreach ($myarray as $item) {
    // 生成唯一分组标识键
    $groupKey = $item['u'] . '-' . $item['v'] . '-' . $item['w'];
    
    if (!isset($temp[$groupKey])) {
        // 首次遇到该分组,直接初始化
        $temp[$groupKey] = $item;
    } else {
        // 已有该分组,合并x/y/z的值
        $temp[$groupKey]['x'] .= ',' . $item['x'];
        $temp[$groupKey]['y'] .= ',' . $item['y'];
        $temp[$groupKey]['z'] .= ',' . $item['z'];
    }
}

// 将临时分组数组转为索引数组,得到最终结果
$output = array_values($temp);

// 打印验证结果
print_r($output);
?>

运行上述代码后,输出结果与期望完全一致。

内容的提问来源于stack exchange,提问作者Dslide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:07:55