Foros del Web » Programando para Internet » PHP »

str_replace con arrays

Estas en el tema de str_replace con arrays en el foro de PHP en Foros del Web. Hola, Quiero sustituir en los resultados de una búsqueda las palabras de la cadena de busqueda por las mismas palabras subrayadas. Es decir, si busco ...
  #1 (permalink)  
Antiguo 02/01/2007, 18:55
 
Fecha de Ingreso: octubre-2006
Mensajes: 11
Antigüedad: 17 años, 6 meses
Puntos: 0
Pregunta str_replace con arrays

Hola,

Quiero sustituir en los resultados de una búsqueda las palabras de la cadena de busqueda por las mismas palabras subrayadas.
Es decir, si busco 'electricidad javier' quiero que me subraye en los resultados 'electricidad','javier', 'Electricidad' y 'Javier'(con o sin mayúscula).

He hecho algo así para hacerme un vector con las palabras de la cadena con la primera mayúscula y sin la primera mayúscula(suponiendo que siempre se introducen con minúscula)

Código PHP:
$trozos=explode(" ",$_GET['busqueda']);
$busqmay=ucwords($_GET['busqueda']);
$trozosmay=explode(" ",$busqmay); 
$trozosmaymin=array_merge($trozos,$trozosmay); 

Luego en los resultados pongo:

Código PHP:
<?php  echo str_replace($trozosmaymin,"<span style='text-decoration: 
underline'>$trozosmaymin</span>"
,$row_buscarproy['inv_ap1
'
].' '.$row_buscarproy['inv_ap2'].', '.$row_buscarproy['inv_nom']);?>
Creo que el problema lo tengo con la cadena sustituta(,"<span style='text-decoration: underline'>$trozosmaymin</span>") porque me sustituye cada elemento de $trozosmaymin por la palabra 'Array' subrayada.¿Es como si no tuviera elementos suficientes para sustituir o algo así?¿Cómo podría ser eso si son el mismo vector?

A ver si me podeis decir algo.

¿Habría alguna manera de que no tuviese en cuenta mayúsculas y minúsculas?
Es decir, que poniendo javier en la búsqueda me sustituyese javier por javier subrayado, Javier por Javier subrayado, JAVIER por JAVIER subrayado,....

Saludos
  #2 (permalink)  
Antiguo 02/01/2007, 19:31
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: str_replace con arrays

En el Manual de php

(PHP 5) str_ireplace -- Versión insensible a mayúsculas y minúsculas de str_replace().

En el mismo enlace, en los comentarios creo haber visto una funcion para la version 4 de php.

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 03/01/2007, 12:44
 
Fecha de Ingreso: octubre-2006
Mensajes: 11
Antigüedad: 17 años, 6 meses
Puntos: 0
Pregunta Re: str_replace con arrays

Esa es exactamente la func que buscaba para solucionar el problema de las may y min(gracias Federico) pero aún me falla cuando uso dos arrays($trozos):

Código PHP:
<?php $trozos=explode(" ",$_GET['busqueda']);

do { 
echo 
str_ireplace($trozos,"<span style='text-decoration: 
underline'>$trozos</span>"
,$row_buscarproy['inv_ap1'].' '.$row_buscarproy
['inv_ap2'].', '.$row_buscarproy['inv_nom']); 
} while (
$row_buscarproy mysql_fetch_assoc($buscarproy)); ?>

Las palabras incluidas en $trozos me las sigue poniendo como 'Array'.
Tengo instalado el WAMP5 con php 5.1.2(por si sirve de algo)

Un Saludo
  #4 (permalink)  
Antiguo 11/07/2007, 15:32
 
Fecha de Ingreso: julio-2007
Mensajes: 2
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: str_replace con arrays

Yo tengo un problema muy parecido, quiero hacer lo mismo que charlin pero sin hacer distinción de acentos.

Si busco 'cancion' quiero que me subraye en los resultados

"cancion" y "canción"

creo que la solución no es muy sencilla, llevo un buen rato pensandolo y no se me ocurre nada ingenioso. A ver si a alguien se le ocurre algo

Saludos
  #5 (permalink)  
Antiguo 11/07/2007, 15:59
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 74
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: str_replace con arrays

Haber, se me ocurre esto, pero tendran que checar las palabras clave para hacerlo en php

cadenota = "El texto largo que viene de la base de datos o algo";
txtaRemplazar = palabra;

nuevotxtconsubrayado = "<u>".palabra."</u>";

nuevaCadenota = strReplace(cadenota, txtaRemplazar, nuevotxtconsubrayado);

La onda aqui es que tendran que buscar el equivalente a strReplace para php, no lo recuerdo en este momento y la verdad es algo que se me ocurrio leyendo su mensaje.

Ahora tendràn que checar si el strReplace usa parametros para mayusculas o se usa para hacer distinciones.

Solo funciona una vez, para que funcione con la misma cadena varias veces pueden crear una funcion recursiva, que lea la misma cadena y le envien una cadena de textos a rempleazar.

En fin, es solo una idea, hoy en la tarde busco la solución a este problema.

Saludos


nos leemos...

richer
__________________
Nos leemos...

Richer
Is 40:31 1Co 16:22
  #6 (permalink)  
Antiguo 12/07/2007, 08:33
 
Fecha de Ingreso: julio-2007
Mensajes: 2
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: str_replace con arrays

Gracias por la respuesta pero no es el problema, efectivamente esa función sirve para modifcar un texto, pero el problema son lo acentos. Ahora mismo uso:


Código PHP:

$tmp2
strtolower_es($fulltxt); //pasa a minusculas... seria mejor usar mb_strlower
$tmp2elimina_acentos(utf8_decode($tmp2)); // quita los acentos de la cadena original

while (eregi("[^\>](".$change.")[^\<]"" ".$tmp2." "$regs)) {
        
$tmp2eregi_replace($regs[1], "<b>".$regs[1]."</b>"$tmp2);

Por ejemplo:

$change = "cancion" // cadena a buscar
$tmp2 = "esta canción, es la mejor cancion" // texto donde buscarla

resultado que quisiera:

$tmp2 = "esta canción, es la mejor cancion"


Como se puede ver en el código dejo la cadena original(fulltxt) sin mayusculas(aunque no es necesario) ni acentos para que la funcion eregi encuentre el texto ($change).

La idea es que he pensado(aunque es muy fea) es localizar la posicion del texto en la cadena "sin formato", la $tmp2, y en la original añadir las etiquetas.

1 millon de dolares para quien encuentre una buena solución
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 20:42.