No es una solución óptima en cuanto a recursos, pero queda elegante:
Código PHP:
function cambiazo($arrLetras, $arrReemplazos, $texto)
{
if(count($arrLetras)!=count($arrReemplazos))
{
echo "ERROR: para cada letra a reemplazar debe haber un reemplazo";
exit();
}
$letra=array_shift($arrLetras);
$reemplazo=array_shift($arrReemplazos);
if(count($arrLetras)>0 && count($arrReemplazos)>0)
{
return str_replace($letra, $reemplazo, cambiazo($arrLetras, $arrReemplazos, $texto));
}
else
{
return str_replace($letra, $reemplazo, $texto);
}
}
echo cambiazo("Escribo con ñ y con Ñ", array('ñ', 'Ñ'), array('ñ', 'Ñ');
No garantizo que funcione, lo acabo de inventar y no lo probé: simplemente va reemplazando las letras que se le pasen en los arrays (ahora que lo pienso quedaría más prolijo un sólo array pero asociativo donde la clave sea el carácter a reemplazar y el dato el reemplazo) y llamando recursivamente a la misma función con los arrays que se le pasan pero sin el elemento que ya se usó. ¡Suerte!
PD: quizás algunas funciones de expresiones regulares ya te permitan hacer eso sin tanto lío; no lo sé.