按name键公共值排序并合并多维数组,合并Diamètre的value为数组
解决多维数组按name键合并并处理Diamètre值的问题
我来帮你搞定这个多维数组的合并需求!下面是完全贴合你要求的PHP实现方案:
实现代码
<?php // 你的原始多维数组示例(补全了未展示的部分) $originalArray = [ [ ['name' => 'Diamètre', 'value' => 5], ['name' => 'Force', 'value' => 30] ], [ ['name' => 'Diamètre', 'value' => 10], ['name' => 'Force', 'value' => 30] ], [ ['name' => 'Poids', 'value' => 15] ] ]; // 初始化分组存储数组 $groupedData = []; // 遍历原始数组,按name收集所有value foreach ($originalArray as $subArray) { foreach ($subArray as $item) { $name = $item['name']; $value = $item['value']; // 若当前name未被初始化,先创建基础结构 if (!isset($groupedData[$name])) { $groupedData[$name] = [ 'name' => $name, 'value' => [] ]; } // 将value添加到对应name的集合中 $groupedData[$name]['value'][] = $value; } } // 处理最终结果:去重+格式调整 $finalResult = []; foreach ($groupedData as $item) { $processedItem = $item; // 去除重复的value值 $processedItem['value'] = array_unique($processedItem['value']); // 特殊处理Diamètre:始终保留数组格式;其他name若只有单个值则转为普通值 if ($item['name'] !== 'Diamètre' && count($processedItem['value']) === 1) { $processedItem['value'] = reset($processedItem['value']); } $finalResult[] = $processedItem; } // 按name键排序结果数组(可选,满足你排序的需求) usort($finalResult, function($a, $b) { return strcmp($a['name'], $b['name']); }); // 输出最终结果 print_r($finalResult); ?>
代码逻辑拆解
- 分组收集:通过两层
foreach遍历所有子项,把相同name对应的value全部归集到同一集合中,为后续合并做准备。 - 值处理:
- 用
array_unique去掉重复的value,避免冗余数据; - 针对
Diamètre做特殊格式保留:不管有多少个值都维持数组形式;其他name如果最终只剩单个值,就转为普通变量(如果需要所有name都保留数组,可删除这一步判断)。
- 用
- 排序优化:通过
usort配合字符串比较函数,按name的字母顺序对结果数组排序,满足你“按name公共值排序”的要求。
运行输出结果
执行上述代码后,会得到符合预期的结果:
Array ( [0] => Array ( [name] => Diamètre [value] => Array ( [0] => 5 [1] => 10 ) ) [1] => Array ( [name] => Force [value] => 30 ) [2] => Array ( [name] => Poids [value] => 15 ) )
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

