довел до ума, теперь должен работать как часы )
<?php
$array = array(
'септик',
'септик танк',
'септик дома',
'септик цена',
'загородного септик',
'септики загородного дома',
'септик топас',
'септик руками',
'септик отзывы',
'септик купить',
'куплю септик',
'откачка септиков',
'установка септика',
'септик дачи',
);
$val_0 = $array;
for($i = 0; isset($val_0[$i]); $i++){
$val_1 = $val_0[$i];
foreach($val_0 as &$val_2){
$val_1_1 = explode(' ', $val_1);
$val_1_3 = '';
for($n = 0; isset($val_1_1[$n]); $n++){
$val_1_2 = $val_1_1[$n];
if(strpos($val_2, $val_1_2) !== false){
$val_1_3[$n] = 1;
}else{
$val_1_3[$n] = 0;
}
}
if(array_search('0', $val_1_3) === false && $val_1 != $val_2){
$val_3 = $val_2;
foreach ($val_1_1 as &$val_1_4){
$val_3 = str_replace($val_1_4, '', $val_3);
}
$val_4 = explode(' ', $val_3);
for($b = 0; isset($val_4[$b]); $b++){
if(strlen(utf8_decode($val_4[$b])) < 3){
unset($val_4[$b]);
}
}
foreach($val_4 as &$val_5){
if(strpos($val_6[$i], $val_5) === false){
if($val_5 != '' && $val_6[$i] != ''){
$val_6[$i] .= ' '.$val_5;
}else if($val_5 != ''){
$val_6[$i] .= $val_5;
}
}
}
}else{
$val_6[$i] .= '';
}
}
}
$result = $val_6;
print_r($result);
//вывод массива для наглядности, что пробелы стоят верно
for($i = 0; array_key_exists($i, $result); $i++){
echo '<br /><br />';
echo 'Часть массива '.$i.':<br />';
echo '|'.$result[$i].'|<br />';
}
?>