PHP中如何根据指定键的相同值合并多维数组元素
解决方案
核心思路是用组合唯一键来分组:把column_name、match、coll三个字段的值拼接成一个唯一标识,以此作为临时数组的键,遍历原数组时判断该键是否存在,存在则追加text内容,不存在则存入当前元素。
实现代码
// 初始化临时数组用于分组存储 $merged = []; foreach ($result as $element) { // 生成唯一分组键:用三个字段拼接确保唯一性 $groupKey = $element['column_name'] . '|' . $element['match'] . '|' . $element['coll']; if (isset($merged[$groupKey])) { // 分组已存在,追加text内容(用空格分隔) $merged[$groupKey]['text'] .= ' ' . $element['text']; } else { // 分组不存在,直接存入当前元素 $merged[$groupKey] = $element; } } // 把关联数组转为索引数组(和原数组结构一致) $finalResult = array_values($merged); // 输出验证 echo "<pre>"; print_r($finalResult); echo "</pre>";
代码说明
$groupKey用|分隔三个字段,避免字段值本身包含特殊字符导致键冲突(如果字段值可能有|,可以换其他不常用的分隔符,比如###)- 第一次遇到某分组时,直接把整个元素存入临时数组;后续遇到同分组元素,只追加
text字段 - 最后用
array_values()把临时的关联数组转回索引数组,结构和原数组保持一致
验证结果
运行上述代码后,得到的结果和预期完全一致:
Array ( [0] => Array ( [id] => 86 [column_name] => Accommodation [text] => hotel staff [match] => 2 [coll] => 1 ) [1] => Array ( [id] => 91 [column_name] => Accommodation [text] => marriot [match] => 3 [coll] => 1 ) )
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

