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

按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);
?>

代码逻辑拆解

  1. 分组收集:通过两层foreach遍历所有子项,把相同name对应的value全部归集到同一集合中,为后续合并做准备。
  2. 值处理:
    • 用array_unique去掉重复的value,避免冗余数据;
    • 针对Diamètre做特殊格式保留:不管有多少个值都维持数组形式;其他name如果最终只剩单个值,就转为普通变量(如果需要所有name都保留数组,可删除这一步判断)。
  3. 排序优化:通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:14