Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Reemplazar sin mayor problema

Estas en el tema de Reemplazar sin mayor problema en el foro de PHP en Foros del Web. Hola a todos, quisiera saber como puedo hacer esto: Quiero reemplazar de una subcadena por otra es decir que yo quiero tomar de la cadena ...
  #1 (permalink)  
Antiguo 23/07/2014, 19:03
 
Fecha de Ingreso: agosto-2006
Mensajes: 32
Antigüedad: 17 años, 7 meses
Puntos: 1
Reemplazar sin mayor problema

Hola a todos, quisiera saber como puedo hacer esto:

Quiero reemplazar de una subcadena por otra es decir que yo quiero

tomar de la cadena X, la palabra Carlos
'Andrés;Carlos;Luis"

y luego reemplazarla por German.

Previamente ya habia ajustado que german debe reemplazarse por el segundo de la cadena...

Código PHP:
$reemplazar='German'
$numero='2'
cadenax='Andrés;Carlos;Luis'
$extraer explode (";"$cadena);
$totalcount($extraer);
$extraer[$numero]=$reemplazar;
for (
$i 0$i <= $total$i++) {
$llenar.=$extraer[$i];
$llenar.=';'

Pese que existe una funcion mucho mas simple str_replace , a veces en la cadena hay muchos carlosy yo solo quiero que reemplace la subcadena 2 o la que yo especifique...

Adicional a esto quiero volver a unir todas las subcadenas en una, que es la variable $llenar pero no se si alla una forma mas simple



Gracias por su atencion
  #2 (permalink)  
Antiguo 23/07/2014, 19:07
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Reemplazar sin mayor problema

Con la función str_replace lo puedes hacer en una línea.

Código PHP:
Ver original
  1. echo str_replace('Carlos', 'Germán', $cadenax); //Andrés;Germán;Luis

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 23/07/2014, 19:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 32
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Reemplazar sin mayor problema

Si tengo mas de un carlos me los reemplaza todos, solo quiero que reemplaace el de la subcadena 2
  #4 (permalink)  
Antiguo 23/07/2014, 20:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Reemplazar sin mayor problema

En ese caso, se me ocurre que crees una función en la cual descompongas la cadena a partir de los delimitadores que en este caso vienen siendo los punto y coma, formando así un array el cual recorrerías con ayuda de un bucle y a la primera coincidencia que se encuentre, la reemplazas por la palabra que quieras, conviertes al array en cadena uniendo a las palabras con el delimitador y devuelves la cadena actualizada.

Código PHP:
Ver original
  1. function reemplazar($cadena, $delimitador, $objetivo, $reemplazo){
  2.     $array = explode($delimitador, $cadena);
  3.     for ($i = 0, $l = count($array); $i < $l; $i++)
  4.         if ($array[$i] == $objetivo){
  5.             $array[$i] = $reemplazo;
  6.             break;
  7.         }
  8.     return implode($delimitador, $array);
  9. }
  10.  
  11. $string = 'Andrés;Carlos;Luis;Carlos';
  12. $delimiter = ';';
  13. $target = 'Carlos';
  14. $replace = 'Germán';
  15.  
  16. echo reemplazar($string, $delimiter, $target, $replace); //Andrés;Germán;Luis;Carlos

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 23/07/2014, 22:37
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Reemplazar sin mayor problema

Se supone que si envías un cuarto parámetro a str_replace se realizará solo esa cantidad de reemplazos:

Código PHP:
Ver original
  1. $buscar = 'Carlos';
  2. $reemplazar = 'German';
  3. $cadenax = 'Andrés;Carlos;Luis;Carlos;Alejandro;Carlos';
  4. $cadenax = str_replace($buscar, $reemplazar, $cadenax, 1);

Más info en: str_replace()

El problema sería que el elemento a reemplazar no fuera el primero.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 23/07/2014, 23:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Reemplazar sin mayor problema

Había olvidado el detalle de que puedes elegir el número de palabra.

Código PHP:
Ver original
  1. <?php
  2. function reemplazar($cadena, $delimitador, $objetivo, $reemplazo, $numero){
  3.     $array = explode($delimitador, $cadena);
  4.     $total = 0;
  5.     for ($i = 0, $l = count($array); $i < $l; $i++)
  6.         if ($array[$i] == $objetivo){
  7.             if (++$total == $numero){
  8.                 $array[$i] = $reemplazo;
  9.                 break;
  10.             }
  11.         }
  12.     return implode($delimitador, $array);
  13. }
  14.  
  15. $string = 'Andrés;Carlos;Luis;Carlos;Julián;Carlos;Mario';
  16. $delimiter = ';';
  17. $target = 'Carlos';
  18. $replace = 'Germán';
  19. $number = 3;
  20.  
  21. 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
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 25/07/2014 a las 01:17 Razón: Explicación
  #7 (permalink)  
Antiguo 25/07/2014, 01:25
 
Fecha de Ingreso: agosto-2006
Mensajes: 32
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Reemplazar sin mayor problema

Al final el que me funciono fue este:

Código PHP:
$reemplazar='German'$cadena='Andres;Carlos;Luis;Carlos;Carlos'$cadenaf=preg_replace("Carlos",$reemplazar,$cadena,3); 
echo 
$cadenaf
Gracias a todos de antemano

Etiquetas: mayor, reemplazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:35.