Ho provato a fare questo al volo.
Controllo un array principale, partendo dal presupposto che le chiavi corrispondono in tutti e che devo eliminare tutte quelle vuote in quello principale e negli altri:

Codice PHP:
$cognomi = array(1=>'primo'2=>''3=>'terzo');
$nomi = array(1=>'primo'2=>''3=>'terzo');

print 
'<pre>';print_r($cognomi);print '</pre>';   
print 
'<pre>';print_r($nomi);print '</pre>';   


foreach(
$cognomi as $key=>$v){
    if(
$v == ''){
        
$vuoto[]=$key;
    }
}

foreach(
$vuoto as $k){
    unset(
$cognomi[$k]);
    unset(
$nomi[$k]);
}

print 
'<pre>';print_r($cognomi);print '</pre>';   
print 
'<pre>';print_r($nomi);print '</pre>';   
$i=0;
foreach(
$cognomi as  $key=>$v){
    
$i++;
    
$newCognomi[$i]= $cognomi[$key];
    
$newNomi[$i]= $nomi[$key];
}

$cognomi $newCognomi;
$nomi $newNomi;

print 
'<pre>';print_r($newCognomi);print '</pre>';   
print 
'<pre>';print_r($newNomi);print '</pre>'
PS
rigenero le chiavi partendo dalla numero 1 in poi.. se parte dalla zero, uguale senza $i;