Foros del Web » Programando para Internet » PHP »

Problemas con str_replace y ereg_replace

Estas en el tema de Problemas con str_replace y ereg_replace en el foro de PHP en Foros del Web. Hola buenas noches, Tengo un problema con las funciones de php “str_replace” y “ereg_replace”, os comento. Tengo que buscar dentro de una cadena una subcadena ...
  #1 (permalink)  
Antiguo 08/02/2009, 20:03
 
Fecha de Ingreso: febrero-2009
Mensajes: 1
Antigüedad: 15 años, 2 meses
Puntos: 0
Problemas con str_replace y ereg_replace

Hola buenas noches,
Tengo un problema con las funciones de php “str_replace” y “ereg_replace”, os comento.

Tengo que buscar dentro de una cadena una subcadena modificarla, el problema es que estas funciones (str_replace y ereg_replace) me cambian todas las coincidencias que encuentra en la cadena principal a buscar (que son 20 coincidencias), y yo lo que quiero es que me cambie solo una y en cada una me lo sustituya por una diferente. Lo intentado hacer de varias formas, me he leído gran parte de los temas del foro pero no doy con la solución.

Lo primero que probé fue:

$texto = estr_replace($textoBuscar,$textoSutituir, $texto);

Viendo que me sustituida todas las coincidencias (20 veces ) en vez de solo una busque y probé con:

$texto = estr_replace( $textoBuscar, $textoSutituir[$cont], $texto, $cont);

Como tampoco me funcionaba pues seguí buscando y encontré lo otra forma de hacerlo pero tampoco funciona que es:

$textoSutituir[0] = "ProductosItem0";
$textoSutituir[1] = "ProductosItem1";
$textoSutituir[2] = "ProductosItem2";
$textoSutituir[3] = "ProductosItem3";
$textoSutituir[4] = "ProductosItem4";
$textoSutituir[5] = "ProductosItem5";
$textoSutituir[6] = "ProductosItem6";
$textoSutituir[7] = "ProductosItem7";
$textoSutituir[8] = "ProductosItem8";
$textoSutituir[9] = "ProductosItem9";
$textoSutituir[10] = "ProductosItem10";
$textoSutituir[11] = "ProductosItem11";
$textoSutituir[12] = "ProductosItem12";
$textoSutituir[13] = "ProductosItem13";
$textoSutituir[14] = "ProductosItem14";
$textoSutituir[15] = "ProductosItem15";
$textoSutituir[16] = "ProductosItem16";
$textoSutituir[17] = "ProductosItem17";
$textoSutituir[18] = "ProductosItem18";
$textoSutituir[19] = "ProductosItem19";

$texto = estr_replace( $textoBuscar, $textoSutituir[$cont], $texto, $cont);

Tampoco funciona y ya no se como hacerlo, llevo ya 4 días intentando solucionarlo de alguna forma, ya sea con esta función o otra que me busque primero y luego me sustituya pero no hay manera de conseguirlo.

Yo simplemente lo que quiero es que cuando en la cadena este la palabra “ProductosItem”, me la sustituya en cada uno de las coincidencias por “ProductosItem” acompañado de algún valor más para diferenciar los productos, algo parecido a esto:

1ª Coincidencia : "ProductosItem" ---- > "ProductosItem0"
2ª Coincidencia : "ProductosItem" ---- > "ProductosItem1"
3ª Coincidencia : "ProductosItem" ---- > "ProductosItem2"
4ª Coincidencia : "ProductosItem" ---- > "ProductosItem3"
5ª Coincidencia : "ProductosItem" ---- > "ProductosItem4"
6ª Coincidencia : "ProductosItem" ---- > "ProductosItem5"
Así hasta llegar a 20.

Todo este problema es porque el contenido del que hablo me lo suministran y no tengo la opción de modificar el código, sino solo me limito a modificar el contenido que me llega.

Espero que alguien me pueda ayudar por favor, ya sea utilizando esta función, otras , o algún método para poder hacerlo.

Muchas Gracias de antemano.
  #2 (permalink)  
Antiguo 08/02/2009, 20:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problemas con str_replace y ereg_replace

mmm.... tal ves es mas sencillo de lo que esperabas, debiste investigar... existen mas funciones, y mas potentes!!

una de estas es preg_replace_callback() simple... buscas las coincidencias, y con tu función de callback asignas los valores de vuelta...

puedes usar una variable estatica para llevar el control de los elementos que reemplazas....
Código PHP:
function foo($match=array())
{
  static 
$i 0;
  
$i += 1;
  return 
"Reemplazo($i > $match[0])<br/>";
}

$bar 'esta es una cadena';
$bar preg_replace_callback('/./''foo'$bar);  

echo 
$bar
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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 12:01.