Foros del Web » Programando para Internet » PHP »

Filtrar los resultados de una busqueda utilizando varios criterios

Estas en el tema de Filtrar los resultados de una busqueda utilizando varios criterios en el foro de PHP en Foros del Web. Tengo un formulario con varios input, nombre, apellido, curso, localidad y necesito que al hacer una búsqueda en un array me muestre los resultados que ...
  #1 (permalink)  
Antiguo 30/05/2019, 11:26
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Filtrar los resultados de una busqueda utilizando varios criterios

Tengo un formulario con varios input, nombre, apellido, curso, localidad y necesito que al hacer una búsqueda en un array me muestre los resultados que cumplan varios criterios,
Es decir, si en los input escribo Ana y Madrid, me muestre Ana Pelaez y Ana Lopez y si pongo Ana y Contabilidad, me muestre Ana Garcia y Ana Lopez
Código PHP:
Ver original
  1. $listado = array(  
  2.  
  3. array('Ana', 'Pelaez', 'Informatica', 'Madrid'),
  4.  
  5. array('Ana', 'Garcia', 'Contabilidad', 'Sevilla'),
  6.  
  7. array('Ana', 'Lopez', 'Contabilidad', 'Madrid'),
  8.  
  9. );
He creado un array de filtro, pero no se como hacer para que me haga la busqueda por los dos campos y por tanto que me muestre los nombres que cumplan con los dos criterios, estoy empezando con php, asi que mi nivel es bastante básico
Código PHP:
Ver original
  1. $filtros = array();
  2.  
  3. if(isset($_GET['nombre'])) {
  4.  $filtros = $_GET['nombre'];     
  5. }
  6.  
  7. if(isset($_GET['curso'])) {
  8.  $filtros = $_GET['curso'];  
  9. }
  10.  
  11. if(isset($_GET['localidad'])) {
  12.  $filtros = $_GET['localidad'];  
  13. }
  #2 (permalink)  
Antiguo 30/05/2019, 13:23
 
Fecha de Ingreso: abril-2006
Mensajes: 314
Antigüedad: 13 años, 6 meses
Puntos: 60
Respuesta: Filtrar los resultados de una busqueda utilizando varios criterios

pues no entiendo el por que el uso de arrays para ese tipo de datos, pero supongo que sera para una busqueda estilo CSV

Código PHP:
Ver original
  1. $listado = array(  
  2.  
  3. array('Ana', 'Pelaez', 'Informatica', 'Madrid'),
  4.  
  5. array('Ana', 'Garcia', 'Contabilidad', 'Sevilla'),
  6.  
  7. array('Ana', 'Lopez', 'Contabilidad', 'Madrid'),
  8.  
  9. );
  10.  
  11. $filtros = array();
  12.  
  13. if(isset($_GET['nombre'])) {
  14.  $filtros[] = $_GET['nombre'];    
  15. }
  16.  
  17. if(isset($_GET['curso'])) {
  18.  $filtros[] = $_GET['curso'];  
  19. }
  20.  
  21. if(isset($_GET['localidad'])) {
  22.  $filtros[] = $_GET['localidad'];  
  23. }
  24. $coincidencias=array();
  25. foreach($listado AS $index=>$row){
  26.      foreach($row AS $columna){
  27.            foreach($filtros AS $buscar_texto){
  28.              if(!isset($coincidencias[$index]) AND stripos( $columna,$buscar_texto )!==false){
  29.                   $coincidencias[$index]=$row;
  30.                   break;
  31.              }
  32.            }
  33.      }
  34.  
  35. }
  36.  
  37. echo "se encontraron los siguientes resultados";
  38.  
  39. var_dump($coincidencias);
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #3 (permalink)  
Antiguo 31/05/2019, 05:15
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: Filtrar los resultados de una busqueda utilizando varios criterios

Algo no estoy haciendo bien porque no me funciona la búsqueda, no me muestra ningún resultado
Con este código recojo los resultados, la variable $p es la que utilizo para pasar a la siguiente página, en el caso de que los resultados no quepan en una página
Código PHP:
Ver original
  1. paginar($coincidencias, $p);
Y luego con esta función, en otro archivo, recojo esas variables y muestro el resultado por pantalla, le doy formato y muestro los botones para cambiar de página, etc.
Código PHP:
Ver original
  1. function paginar($listado, $p) {
  2.             for ($i=$inicio; $i<$final; $i++) {            
  3.                
  4.             if (isset($listado[$i])) {
  5.                            
  6. echo "<br />";
  7. echo "<table border=1>         
  8.         <tr>         
  9.             <td>".$listado[$i][0]."</td><td>".$listado[$i][1]."</td><td>".$listado[$i][2]."</td><td>".$listado[$i][3]."</td>                   
  10.         </tr>      
  11.     </table>";         
  12.  
  13.            } else
  14.                 break;
  15.            }
  16. }
  #4 (permalink)  
Antiguo 31/05/2019, 08:34
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 550
Antigüedad: 14 años
Puntos: 23
Respuesta: Filtrar los resultados de una busqueda utilizando varios criterios

Simplificando un poco la respuesta de tuadmin:

Código PHP:
<?php

$list 
= [
    [
'Ana''Pelaez''Informatica''Madrid'],
    [
'Ana''Garcia''Contabilidad''Sevilla'],
    [
'Ana''Lopez''Contabilidad''Madrid'],
];

// Aqui puedes agregar todos los filtros que creas necesarios
$validFilters = ['nombre''curso''localidad'];
$filters      array_map(function ($element) {
    return 
$_GET[$element];
}, 
$validFilters);

$results = [];
foreach (
$list as $entry) {
    
$result array_intersect($filters$entry);
    if (
count($result) > 0) {
        
$results[] = $entry;
    }
}
No lo probé el código pero debería ser lo que tu buscas.
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #5 (permalink)  
Antiguo 31/05/2019, 12:21
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: Filtrar los resultados de una busqueda utilizando varios criterios

El de tuadmin, efectivamente yo había hecho algo mal con el código y una vez resuelto el problemilla hace la búsqueda perfectamente, pero no busca en el campo correspondiente al input del que recibe los datos, entonces si tu escribes informática en el input nombre, te lo encuentra porque busca la palabra en todo el array, necesitaría incluir algo asi, que es la búsqueda que yo utilizo para buscar por un campo sólo y el código de vb2005 también funciona bien, pero lógicamente tiene el mismo problema
Código PHP:
Ver original
  1. foreach($listado as $valor) {
  2.                
  3.                 if (!empty($_GET['nombre'])) {                             
  4.                                            
  5.                     $cadena = $valor[0];       
  6.                                                                                                
  7.                 }
  8.                 elseif (!empty($_GET['curso']) ) {                                 
  9.                                            
  10.                     $cadena = $valor[1];
  11.                                                                                                
  12.                 }

Última edición por pedromir; 31/05/2019 a las 12:47
  #6 (permalink)  
Antiguo 31/05/2019, 12:59
 
Fecha de Ingreso: abril-2006
Mensajes: 314
Antigüedad: 13 años, 6 meses
Puntos: 60
Respuesta: Filtrar los resultados de una busqueda utilizando varios criterios

Cita:
Iniciado por pedromir Ver Mensaje
El de tuadmin, efectivamente yo había hecho algo mal con el código y una vez resuelto el problemilla hace la búsqueda perfectamente, pero no busca en el campo correspondiente al input del que recibe los datos, entonces si tu escribes informática en el input nombre, te lo encuentra porque busca la palabra en todo el array, necesitaría incluir algo asi, que es la búsqueda que yo utilizo para buscar por un campo sólo y el código de vb2005 también funciona bien, pero lógicamente tiene el mismo problema
Código PHP:
Ver original
  1. foreach($listado as $valor) {
  2.                
  3.                 if (!empty($_GET['nombre'])) {                             
  4.                                            
  5.                     $cadena = $valor[0];       
  6.                                                                                                
  7.                 }
  8.                 elseif (!empty($_GET['curso']) ) {                                 
  9.                                            
  10.                     $cadena = $valor[1];
  11.                                                                                                
  12.                 }
bueno si el ejemploq ue psue primero era para que te des una idea, de como hacer la busqueda y filtrado,

si quieres que sea por columna, seria algo asi

Código PHP:
Ver original
  1. <?php
  2. $_GET['localidad']='drid'; //ejecutamos test
  3. $listado = array(  
  4.     array('Ana', 'Pelaez', 'Informatica', 'Madrid'),
  5.     array('Ana', 'Garcia', 'Contabilidad', 'Sevilla'),
  6.     array('Ana', 'Lopez', 'Contabilidad', 'Madrid'),
  7.  );
  8.  
  9. $filtros = array(
  10.     @$_GET['nombre'], //el campo nombre,
  11.     @$_GET['nombre'], //el campo de apellido
  12.     @$_GET['curso'], //el campo de curso
  13.     @$_GET['localidad']//el campo de localidad
  14.  );
  15.  
  16. $coincidencias=array();
  17. foreach($listado AS $index=>$row){
  18.      foreach($row AS $i =>$columna){
  19.         if(!isset($coincidencias[$index])
  20.             && isset($filtros[$i]) //verificamos que exista el filtro
  21.                && $filtros[$i]          //verificamos que el filtro no sea vacio  
  22.             && stripos( $columna,$filtros[$i] )!==false )
  23.         {
  24.             $coincidencias[$index]=$row;    break;
  25.         }          
  26.      }
  27. }
  28.  
  29. echo "se encontraron los siguientes resultados";
  30.  
  31. var_dump($coincidencias);
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #7 (permalink)  
Antiguo 02/06/2019, 07:31
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 5 años, 10 meses
Puntos: 2
Respuesta: Filtrar los resultados de una busqueda utilizando varios criterios

Pero entonces me muestra los resultados que cumplan una condición, aunque no cumplan el resto, si yo en nombre pongo Antonio, que no existe y en curso pongo Informática, como esto si existe, me muestra Ana Pelaez Informatica, cuando no me debería mostrar nada



La zona horaria es GMT -6. Ahora son las 01:55.