Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] filtrar resultados de busqueda

Estas en el tema de filtrar resultados de busqueda en el foro de PHP en Foros del Web. Hola amigas/os, miren a ver si me pueden echar una mano con esto: Tengo un codigo que me permite mostrar el resultado de una busqueda ...
  #1 (permalink)  
Antiguo 27/02/2016, 09:18
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 5
filtrar resultados de busqueda

Hola amigas/os, miren a ver si me pueden echar una mano con esto:

Tengo un codigo que me permite mostrar el resultado de una busqueda extrayendo los resultados de array.

Y lo hace bien, pero yo lo que necesito es que me muestre los resultados que vayan coincidiendo con las letras que voy metiendo.

Es decir que si meto la "c" me muestre todos los resultados que "empiecen" por la "c",

no que contengan la "c". y a medida que se mete un segundo caracter de busqueda

osea "ce", que se filtre la busqueda a menos resultados cada vez.

Decir que este fragmento de codigo php forma parte de un buscador ajax que llevo entre manos.

Cualquier ayuda se agradece mucho.

este es el codigo:

Código PHP:
Ver original
  1. $miArray=array(
  2.  
  3.         "Bucks",
  4.         "Bulls",
  5.  
  6.         "Celtics",
  7.         "Cavaliers",
  8.         "Clippers",
  9.  
  10.         "Grizzlies",
  11.  
  12.         "Hawks",
  13.         "Heat",
  14.         "Hornets",
  15.  
  16.         "Jazz",    
  17.  
  18.         "Kings",
  19.         "Knicks",
  20.  
  21.         "Lakers",
  22.  
  23.         "Magic",
  24.         "Mavericks",
  25.  
  26.         "Nets",
  27.         "Nuggets",    
  28.  
  29.         "Pacers",
  30.         "Pelicans",
  31.         "Pistons",
  32.  
  33.         "Raptors",
  34.         "Rockets",
  35.  
  36.         "Sixers",
  37.         "Spurs",
  38.         "Suns",
  39.  
  40.         "Thunder",
  41.         "Timberwolves",
  42.         "Trail Blazers",
  43.  
  44.         "Wizards",
  45.         "Warriors"
  46.  
  47.     );
  48.  
  49.  
  50.    
  51. if(!empty($_POST["dato_a_buscar"]))
  52.    
  53.     {
  54.    
  55.         foreach($miArray as $nombre)
  56.  
  57.             {        
  58.                 if(strpos(strtolower($nombre), strtolower($_POST["dato_a_buscar"]))!==false)
  59.  
  60.                     {
  61.                         $salida="<ul>";
  62.  
  63.                             $salida.="<li>";
  64.  
  65.                                 $salida.="<h2>".$nombre."</h2>";
  66.  
  67.                             $salida.="</li>";
  68.  
  69.                         $salida.="</ul>";
  70.  
  71.                         echo $salida;
  72.                     }  
  73.             }
  74.        
  75.     }
  #2 (permalink)  
Antiguo 27/02/2016, 09:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: filtrar resultados de busqueda

La comparación del resultado de strpos() debe ser diferente, porque FALSE es un valor muy abierto y acepta cualquier posición, sin embargo necesitas comparar que el valor que devuelve strpos() sea exactamente 0, pues así es como funciona.

Te sugiero leer el manual de strpos() para que entiendas cómo funciona.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/02/2016, 09:52
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: filtrar resultados de busqueda

Te entiendo regular.
Pero.. ¿eso tiene que ver algo con la duda que tengo sobre el filtrado de busqueda?

Te refieres a que ponga esto?:

Código PHP:
Ver original
  1. if(strpos(strtolower($nombre), strtolower($_POST["dato_a_buscar"]),0)!==false)

Es que te entiendo tan de manera tan heterea, tan general, que no se como concretarlo para solucionar el problema.

Última edición por mensajeescrito; 27/02/2016 a las 09:59
  #4 (permalink)  
Antiguo 27/02/2016, 10:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: filtrar resultados de busqueda

No se trata sólo de modificar el código hasta que funcione.

Compara estos ejemplos:
Código PHP:
Ver original
  1. $x = 'abc';
  2.  
  3. var_dump(strpos($x, 'a')); // 0
  4. var_dump(strpos($x, 'a') !== FALSE); // TRUE
  5.  
  6. var_dump(strpos($x, 'b')); // 1
  7. var_dump(strpos($x, 'b') !== FALSE); // TRUE

Debes comparar el valor que devuelve strpos() contra 0, no contra FALSE.

Si el resultado es exactamente 0 significa que la coincidencia está desde el inicio del texto: justo lo que estás buscando.

Por favor: lee el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 27/02/2016, 10:45
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: filtrar resultados de busqueda

Vamos a ver;
EL manual ya me lo he leido y hecho mil pruebas, justo antes de poner nada en el foro.

Si escribo aquí es por que no me aclaro todavía.

HE probado los ejemplos que me has dado.
Debe ser un dia de esos en los que uno no ve la solucion aunque la tenga delante.

Si te he entendido bien dices esto:

Código PHP:
Ver original
  1. if(strpos(strtolower($nombre), strtolower($_POST["dato_a_buscar"]))!==0)


pero ahora si que no funciona bien.

En fin ya me busco yo la vida.

Si encuentro la solucion , la podre aqui.

Un saludo.
  #6 (permalink)  
Antiguo 27/02/2016, 10:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: filtrar resultados de busqueda

Estás negando la condición.

El tema, es que strpos() devuelve un número (o false en caso de no encontrar nada) que indica la posición de la coincidencia.

Eso lo dice bien claro el manual, ¿o qué parte del manual no entendiste?

Entonces, si tu idea es hacer "match" de la cadena desde el inicio debes comparar contra cero, no en contra de cero.

Código PHP:
Ver original
  1. $x = 'abc';
  2.  
  3. // MAL
  4. if (strpos($x, 'a') !== FALSE) {
  5.   // ...
  6. }
  7.  
  8. // BIEN
  9. if (strpos($x, 'a') === 0) {
  10.   // ...
  11. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 27/02/2016, 11:09
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: filtrar resultados de busqueda

Ok, lo admito, si es un lobo el problema, me come.
Lo tenia delante pero no lo veia.

Si bien lo unico que puedo decir en mi defensa, es que en el manual solo vi

!== false, y ===false pero no lei por ningun lado los de ===0

no hubiera caido en ello la verdad.

Buscaba info sobre busquedas donde se coincidiera desde el principio pero no encontre nada con ===0.

Ya he aprendido algo que no sabia. Y entendido tambien

Gracias fenomeno por la ayuda.

ahora funciona todo como un reloj suizo

Etiquetas: busqueda, filtrar, resultados
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 21:17.