合并多维关联数组分类并去除子数组重复标签
PHP数组去重并合并标签实现方案
需求说明:给定一个包含分类和对应标签的二维数组,需要去除重复的分类项(以分类键值对中的键为判断依据,比如示例中的2 => 'kategorie_01',键2即为分类标识),保留分类第一次出现的项,并将后续重复分类的所有标签合并到首个分类的标签中,同时去除标签中的重复项。
实现代码
<?php $array = [ [ 2 => 'kategorie_01', 'tags' => [ 1 => 'tag_01', 2 => 'tag_02', ], ], [ 3 => 'kategorie_02', 'tags' => [ 2 => 'tag_02', ], ], [ 1 => 'Default', 'tags' => [ 1 => 'tag_01', 2 => 'tag_02', ], ], [ 2 => 'kategorie_01', 'tags' => [ 2 => 'tag_02', 3 => 'tag_03', ], ], ]; $result = []; $processedCats = []; foreach ($array as $item) { // 获取当前分类的唯一键(每个分类项的第一个键) $catKey = array_keys($item)[0]; if (!isset($processedCats[$catKey])) { // 首次出现的分类,直接加入结果数组 $result[] = $item; // 记录该分类在结果数组中的索引 $processedCats[$catKey] = count($result) - 1; } else { // 重复分类,合并标签并去重 $targetIndex = $processedCats[$catKey]; $result[$targetIndex]['tags'] = array_unique(array_merge($result[$targetIndex]['tags'], $item['tags'])); } } print_r($result); ?>
代码说明
$processedCats用于记录已处理分类的键及其在结果数组中的位置,避免重复遍历查找,提升效率。- 遍历过程中通过
array_keys($item)[0]提取分类的唯一标识键,确保分类判断的准确性。 - 首次出现的分类直接存入结果数组;重复分类则合并标签,利用
array_merge整合标签列表后,通过array_unique去除重复标签,同时保留标签原有的键值关系。 - 最终结果会严格保留分类首次出现的顺序,且标签无重复。
内容的提问来源于stack exchange,提问作者skow
相关产品推荐
相关产品推荐

