Había olvidado el detalle de que puedes elegir el número de palabra.
Código PHP:
Ver original<?php
function reemplazar($cadena, $delimitador, $objetivo, $reemplazo, $numero){
$array = explode($delimitador, $cadena); $total = 0;
for ($i = 0, $l = count($array); $i < $l; $i++) if ($array[$i] == $objetivo){
if (++$total == $numero){
$array[$i] = $reemplazo;
break;
}
}
return implode($delimitador, $array); }
$string = 'Andrés;Carlos;Luis;Carlos;Julián;Carlos;Mario';
$delimiter = ';';
$target = 'Carlos';
$replace = 'Germán';
$number = 3;
echo reemplazar($string, $delimiter, $target, $replace, $number);
Lo anterior imprimirá 'Andrés;Carlos;Luis;Carlos;Julián;Germán;Mario'. La función recibe la cadena completa, el delimitador entre cada palabra que compone a la cadena, la palabra a reemplazar, la palabra que será utilizada como reemplazo y el número de palabra a reemplazar, en caso haya más de una (porque supongo que así es como deseas hacerlo). En la función, separo a la cadena en las palabras que la componen a partir del delimitador, luego, inicializo a la variable acumuladora
$total
en cero e inicio el bucle
for
con el cual recorro el array generado previamente. En cada iteración, verifico si la palabra en la iteración actual es igual a la palabra que busco reemplazar, de ser así, incremento en un el valor de
$total
pues se ha encontrado una coincidencia y comparo su valor actualizado con el número de coincidencia a reemplazar; si son iguales, procedo a asignar a la palabra de reemplazo en lugar de la palabra buscada y termino la ejecución del bucle. Finalmente, reconstruyo la cadena (ya actualizada) y la devuelvo.
Se me ocurren varias ideas para implementar, como verificar que el número de coincidencia a reemplazar no sea mayor que la cantidad real de repeticiones de la palabra a reemplaza y mucho menos mayor que la cantidad total de palabras que componen a la cadena, pero esa tarea la dejo en tus manos.
Saludos