Hoy vamos a ver, como buscar una cadena de texto dentro de un array, utilizando diferentes funciones de PHP.
Tenemos varias formas de hacerlo y que cada una nos devuelve un resultado distinto, en las primeras opciones buscamos el valor integro en los campos, y en la última opción, buscamos el termino en el array con una expresión regular.
Vamos a ver como se hace en cada caso y que es lo que devuelve cada caso.
Contenido
Buscar una cadena en el array usando array_search
En este caso, usaremos la función array_search la cual nos buscará dentro del array para ver si dentro de los campos del array se encuentra el término que buscamos.
1 2 3 4 5 6 7 8 9 | <?php $arrayExample = array('Zapatillas de running', 'Zapatillas de tenis', 'Zapatillas de basket'); $termToSearch = 'Zapatillas de tenis'; $resultSearch = array_search($termToSearch, $arrayExample); if ($resultSearch) { echo 'Se ha encontrado el termino "'.$termToSearch.'" en la posición '.$resultSearch; } else { echo 'El termino "'.$termToSearch.'" no se ha encontrado en el array.'; } |
Aquí vemos que nos mostrará que se ha encontrado el termino «Zapatillas de tenis» en la posición 1, si hubiera más de un resultado de dicha búsqueda, solo nos mostraría el primero que encontrase.
Así que si nos interesa encontrar una coincidencia y devolver la primera que encontremos, esta opción nos serviría totalmente.
Buscar una cadena en el array usando in_array
En esta opción, lo que vamos a hacer es buscar dentro de los campos del array, y dicha función lo que hace es devolvernos si existe o no dentro del array, simplemente eso.
1 2 3 4 5 6 7 8 9 | <?php $arrayExample = array('Zapatillas de running', 'Zapatillas de tenis', 'Zapatillas de basket'); $termToSearch = 'Zapatillas de tenis'; $resultSearch = in_array($termToSearch, $arrayExample); if ($resultSearch) { echo 'Se ha encontrado el termino "'.$termToSearch.'"; } else { echo 'El termino "'.$termToSearch.'" no se ha encontrado en el array.'; } |
Aquí no obtendremos la posición de donde se encuentra la cadena que hemos buscado, pero a lo mejor con un simple true o false nos sirva para hacer funcionar nuestro código.
Buscar una cadena en el array, usando array_filters
Los casos anteriores nos pueden servir para la mayoría de búsquedas que necesitemos. Pero ¿qué ocurre si queremos buscar en el array todos los campos que contengan un término en concreto? Que ninguna de las anteriores opciones nos sirve para lo que queremos, y es por eso que usaremos la función array_filters de PHP, con ella podremos conseguir añadir una función que nos permita hacer una búsqueda, para encontrar nuestro texto dentro de los campos del array, sin que tenga que ser exactamente el mismo que el del campo.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $arrayExample = array('Zapatillas de running', 'Zapatillas de tenis', 'Zapatillas de basket'); $termToSearch = 'zapatillas'; $matches = array_filter($arrayExample, function($var) use ($termToSearch) { return stristr($var, $termToSearch); }); if($matches) { echo 'Se ha encontrado el termino "'.$termToSearch.'" en los siguientes campos: <br>'; foreach ($matches as $match) { echo $match.'<br>'; } } else { echo 'El termino "'.$termToSearch.'" no se ha encontrado en el array.'; } |
Como veis aquí lo que hemos hecho es tirar de la función stristr, que lo que hace es buscarnos, de forma insensible a mayúsculas y minúsculas, si el texto que le hemos dicho existe en el campo del array.
También podríamos usar si nos hiciera falta expresiones regulares, usando por ejemplo preg_match con una función como esta:
1 | $matches = array_filter($arrayExample, function($var) use ($termToSearch) { return preg_match("/$termToSearch/i", $var); }); |
Que simplemente hace lo que hace stristr, pero usando una función más potente.
Pero al final, cada cual debe buscar lo que necesita, y en nuestro caso con la función stristr, hemos tenido suficiente.
Al final lo que nos devuelve el array_filter, es un array con el valor de los campos que coinciden, aquí hemos cogido y los hemos listado, pero vosotros luego podéis hacer lo que queráis con ellos.
Espero que os haya sido de utilidad.
Y recordad! No olvidéis comentar! En vuestro código y en el Blog!
Marcos
Realmente me sirvio.
Tenía algunos problemas con las búsquedas si escribian palabras tales como «tilde», porque mostraba palabras con eñe, ya que como en la base de datos se guardaban como ntilde…
Oyagum
Me alegro que te sirviera 🙂