Foros del Web » Programando para Internet » PHP »

Una de búsqueda

Estas en el tema de Una de búsqueda en el foro de PHP en Foros del Web. Hooola, necesito respuesta para una pregunta más o menos concreta para la q no se me ocurre nada. Tengo una variable string que contiene un ...
  #1 (permalink)  
Antiguo 07/03/2003, 15:03
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 21 años, 8 meses
Puntos: 0
Una de búsqueda

Hooola, necesito respuesta para una pregunta más o menos concreta para la q no se me ocurre nada.

Tengo una variable string que contiene un texto x, necesito mostrar todas las PALABRAS del ese texto x que contengan la cadena "y", como lo hago?

Por ejemplo:
Con el texto : hay casas bonitas en Madrid
Y la cadena: "n"
Devolvera: bonitas, en

He estado buscando funciones con las que pudiera hacerlo pero no he encontrado nada, también mire en las faqs y nada

¿Me ayudan?

Gracias.
  #2 (permalink)  
Antiguo 07/03/2003, 15:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm Pues cuando tienes dudas sobre si existe alguna función para alguna taréa .. lo mejor es que mires en el capítulo correspondiente al tema que sabes q es, en este caso "cadenas de caracteres .. o strings .."

Ahora .. si no encuentras una función especifica que haga tu cometido .. Parate un momento y piensa que funciones te podrían hacer falta de entre todas las q veas en ese capítulo del manual ..

Y .. bueno . despues de la "teoría" .. el ejemplo de práctica .. Te invito a ver en el manual de php (www.php.net/manual/es) cada una de las funciones usadas para q entiendas bien como trabaja el algoritmo ..

Código PHP:
<?
// buscar_palabras()
// entrada: string,string
// salida: array (cada elemento 1 coincidencia)
function buscar_palabras($cadena,$buscar){
 
// inciar array resultados ..
 
$coincidencias=array();
 
// buscar palabras
 
$palabras=explode(" ",$cadena);
 
// recorrer el array $palabras
 
foreach ($palabras as $palabra){
    
// buscar coincidencias de la cadena a buscar en la palabra
    
if (substr_count($palabra,$buscar) > 0){   
        
// si hay coincidencia se añade la palabra al array de salida
        
$coincidencias[]=$palabra;
    }
 }
 
// se devuelve el array de coincidencias
 
return $coincidencias;
}


// llamada a la función ..
$cadena="hay casas bonitas en Madrid";
$resultado=buscar_palabras($cadena,"n");

// Un ejemplo completo de uso:
// concatenamos los elementos del aray con el caracter , (coma)
echo implode(",",$resultado);

?>
Seguramente .. con expresiones regulares se podría resumir el código a un par de líneas .. Seria bueno que mirases tambien esa posibilidad.

Un saludo,

<editado>
Cambíe strpos() por substr_count() para que realmente fuera "entrada: string,string .. " .. Con strpos() solo se aceptaba un caracter (y no cadena) como secuencia a buscar ..
</editado>

Última edición por Cluster; 07/03/2003 a las 15:49
  #3 (permalink)  
Antiguo 07/03/2003, 15:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Una solucion seria partir el texto x en las palabras y luego recorrer esas palabras mirando si tienen la cadena y. Por ejemplo, SI todas las palabras estan separadas por espacio, pordrias hacer:
Código PHP:
$palabras=explode(' ',$texto);
foreach (
$palabras as $palabra) {
  
si $palabra tiene la cadena y
     
echo $palabra

Pero en los textos normales hay otros tipos de separadores (.,;:()[] etc). Con lo que puede que no sea la mejor opcion.

Siguiendo con esta misma idea, podrias usar strtok() para separar el texto en palabras e ir comprobando cada palabra.

Y la ultima opcion seria usar expresiones regulares. En este caso harias la busqueda directamente. Tendrias que encontrar una expresion regular que significara "una palabra que contenga la cadena 'y'", cosa que puede no ser tan sencilla. O una que sea 'una cadena de 0 o mas caracteres que sean numeros o letras seguidos de la cadena 'y' seguida de una cadena de 0 o mas caracteres que sean numeros o letras'.

Buena suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 07/03/2003, 15:51
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Con expresiones regulares...

Código PHP:
<?
$cadena
="hay casas bonitas en Madrid";
$busqueda="n";
preg_match_all ("/[\s]*[\S]*".$busqueda."[\S]*[\s]/",$cadena,$salida);
foreach (
$salida[0] as $resultado){
    echo 
$resultado;
}
?>
Saludos!
__________________
Manoloweb
  #5 (permalink)  
Antiguo 07/03/2003, 16:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
jeje Manoloweb ..

Bueno GameRoot .. quedate con la opción de Manoloweb ..

Como veras para tratar cadenas (string) hay varias formas .. Pero usar expresiones regulares para "algoritmos" complejos seguro q es mas óptimo usar la versión "expresion regular" ...

Un saludo,
  #6 (permalink)  
Antiguo 07/03/2003, 16:16
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5


Es bueno saber que ayudo en algo
__________________
Manoloweb
  #7 (permalink)  
Antiguo 08/03/2003, 03:57
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 21 años, 8 meses
Puntos: 0
Gracias

Muchas gracias a todos, cadad dia me asombra más lo bién que funciona este foro. La verdad es que no conseguí hacer funcionar la versión de manoloweb, me devolvia cadenas en blanco , pero combinando 2 de los jemplos de más arriba lo conseguí

Gracias d nuevo a todos.
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 18:36.