数组关联合并

原始数组是这样
$array = [["a","b"],["b","d"],["e","f"],["c","d"],["j","k"],["h","j"],["b","g"]];

有关联数组合并成这样
$after_array = [["a","b","d","c","g"],["e","f"],["h","j","k"]];

具体思路我不太清楚

阅读 1.7k
2 个回答
新手上路,请多包涵
public function arr_recursive($a){  
    $array = $a;  
    $arr = [];  
  
    $num = count($array);  
    for($i=0;$i<$num;$i++){  
        if(!isset($array[$i])) continue;  
        $marr = $array[$i];  
        for($j=$i+1;$j<$num;$j++){  
            if(!isset($array[$j])) continue;  
            if(array_intersect($marr,$array[$j])){  
                $marr = array_merge($marr,$array[$j]);  
                unset($array[$j]);  
            }  
        }  
  
        $arr[$i] = array_unique($marr);  
    }  
    $arr_value = array_values($arr);  
    $ii = [];  
    foreach($arr_value as $k=>$v){  
        $ii = array_merge($ii,$v);  
    }  
    if(count($ii)==count(array_unique($ii))){  
        return $arr_value;  
    }else{  
        return $this->arr_recursive($arr_value);  
    }  
  
}

想问一下还有其它思路吗

$array2 = $array;
$jumpArr = [];

echo '<pre>';
foreach ($array2 as $i => $v) {

    if (in_array($i, $jumpArr)) {
        unset($array2[$i]);
        continue;
    }

    foreach ($array as $key => $value) {
        if (array_intersect($array2[$i], $array[$key])) {
            $array2[$i] = array_unique(array_merge($array2[$i], $array[$key]));
            unset($array[$key]);
            if ($i != $key) {
                array_push($jumpArr, $key);
            }
        }
    }
}

var_dump($array2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题