Perché annidare 2 cicli foreach, usare unset e contatori?
Basta fare così
Codice PHP:
$chiamata 1;
$modifica 'saluto2';
$test = array('saluto1'=> 'ciao','1'=> 'bello','saluto3'=>'come va');

print_r($test);

$new_array = array();
foreach( 
$test  as $key => $valori )
{
    if(
$key == $chiamata)
    {
        
$new_array[$modifica] = $valori;
    }
    else
    {
        
$new_array[$key] = $valori;
    }
}

$test $new_array;

print_r($test);