PHP - объединить по значению элементов в массиве

Как в массиве

array(4) { 
[0]=> string(21) "itd-sd|100.99.22.12" 
[1]=> string(32) "itd-sd.site.ru|100.99.22.12" 
[2]=> string(21) "mt-sd|192.168.0.1" 
[3]=> string(32) "mt-sd|192.168.0.22"
}

Объединить по значению элементов, чтобы был вот такой результат:

array(2) { 
    [0]=> string(21) "itd-sd|100.99.22.12|itd-sd.site.ru"  
    [1]=> string(21) "mt-sd|192.168.0.1|192.168.0.22"
    }

Т.е мне нужно если в значении элементов есть общее значение - то "склеить" эти элементы в один через разделитель. В первом случае объединяем по значению "100.99.22.12", во втором случае "mt-sd". Натолкните на вариант решения.


Ответы (1 шт):

Автор решения: splash58

Вот вам заготовка, дальше думайте над критериями

$arr = [ 
"itd-sd|100.99.22.12", 
"itd-sd.site.ru|100.99.22.12" ,
"mt-sd|192.168.0.1" ,
"mt-sd|192.168.0.22"
];

$res = [];
$arr = array_map(function ($x) { return explode('|', $x); }, $arr);
for($i=0; $i<count($arr); $i++) {
    for($j= $i+1; $j<count($arr); $j++) {
        if(array_intersect($arr[$i],$arr[$j])) {
            $res[] = implode('|', array_unique(array_merge($arr[$i],$arr[$j])));
        }
    }
}
print_r($res);

[
    [0] => itd-sd|100.99.22.12|itd-sd.site.ru
    [1] => mt-sd|192.168.0.1|192.168.0.22
]
→ Ссылка