Codice PHP:
function get_age_array($str)
{
    
$tmp explode("-"$str);
    foreach (
$tmp as $duplet)
    {
        list(
$nome$eta) = explode(","$duplet);
        
$age_array[] = array("nome" => $nome"eta" => $eta);
    }
    return 
$age_array;
}

function 
get_duplets($a)
{
    
$max_age 70;
    
$n count($a);
    for(
$i=0;$i<$n;$i++)
    {
        
$eta $a[$i]['eta'];
        
$nome $a[$i]['nome'];
        for(
$y=$i;$y<$n;$y++)
        {
            if(
$y != $i)
            {
                
$sum $eta $a[$y]['eta'];
                if(
$sum $max_age)
                {
                    
$d[] = $nome."(".$eta.") - ".$a[$y]['nome']."(".$a[$y]['eta'].")";
                }
            }
        }
    }
    return 
$d;
}

$str1 "Piero,18-Michele,23-Roberto,16";
$str2 "Michela,23-Roberta,48-Elisabetta,72";
$str3 "Mirco,32-Mara,23-Monica,72";

$array get_age_array($str1."-".$str2."-".$str3);

$a get_duplets($array);

foreach (
$a as $duplet)
{
    print(
$duplet."
"
);

la funzione get_age_array() genera l'array bidimensionale (nome, eta) di tutti i nomi presenti nella stringa di input.

la funzione get_duplets() controlla i valori delle eta delle persone presenti nell'array e restituisce un array con le coppie di persone la cui età è minore di $max_age (cambia quel parametro se ne avessi bisogno).

$str1, $str2, $str3 sono le 3 stringhe che arrivano in input alle funzioni. Le ho fuse per fare un'unica stringa e ne ho ricavato il corrispettivo array con get_age_array. Dopo di che ne ho ricavato le coppie "compatibili" e l'ultimo foreach è li solo per una questione di printing più ordinato del risultato.

Spero che fosse quello che ti serviva e soprattutto che non ci siano errori madornali, ma non mi pare.