Buenas tardes foreros,
Tengo un ligero contratiempo, estoy realizando una web donde tengo un buscador y necesito encontrar algo similar al operador LIKE de MySQL pero para realizar búsquedas en cadenas de texto las cuales están en un array de PHP, no puedo almacenarlo en una bases de datos pues los datos son externos a mi sistema y pueden variar en cualquier momento, ademas que esto supondría una carga inmensa.
Gracias
Solucion:
Cita de: MinusFour en 22 Noviembre 2014, 19:58 PM
if(strpos($texto, $busqueda) !== false) {
echo 'ocurrencia detectada';
}
Lo más parecido que conozco son expresiones regulares sobre cada registro, pero obviamente hablando de rapidez es mejor usar un motor de bases de datos optimo para la cantidad de registros e interacción
Expresiones regulares:
<?php
# Similar al Like. Besitos, Dimitrix ^^
$texto = "Este libro es *muy* difícil de encontrar.";
$palabra = "*muy*";
$texto = preg_replace ("/" . preg_quote($palabra) . "/",
"<i>" . $palabra . "</i>",
$texto);
?>
Podrias usar strpos:
if(strpos($texto, $busqueda) !== false) {
echo 'ocurrencia detectada';
}
MinusFour como vas a comprar el poder de un LIKE o un ExpReg con un simple strpos... ;-)
Cita de: Shell Root en 22 Noviembre 2014, 23:15 PM
MinusFour como vas a comprar el poder de un LIKE o un ExpReg con un simple strpos... ;-)
Ojo, yo prefiero muchas veces el strpos ya que te devuelve la posición y de ahí puedes hacer muchas cosas.
Cita de: Shell Root en 22 Noviembre 2014, 23:15 PM
MinusFour como vas a comprar el poder de un LIKE o un ExpReg con un simple strpos... ;-)
Depende de lo que quieras que haga el LIKE. Si tienes un LIKE:
SELECT * FROM tabla WHERE campo LIKE 'test';
No necesitas usar expresiones regulares y es justo lo que dice el manual de php.net.
Citar
Sugerencia
No use preg_match() si solo quiere verificar si una cadena está contenida en otra cadena. Use strpos() o strstr() en su lugar ya que éstas serán más rápidas.
http://php.net/manual/es/function.preg-match.php
Pues si quieres esa consulta no usaría LIKE,
SELECT * FROM tabla WHERE campo = 'test';
Cita de: dimitrix en 23 Noviembre 2014, 01:09 AM
Ojo, yo prefiero muchas veces el strpos ya que te devuelve la posición y de ahí puedes hacer muchas cosas.
Pues porque necesitas la posición, pero cuando necesitas sólo sacar registros con x caracteristicas que?
CitarPues porque necesitas la posición, pero cuando necesitas sólo sacar registros con x caracteristicas que?
Por eso he dicho "en ocasiones", en ocasiones lo puedo necesitar para virsas cosas, como por ejemplo:
- Si es la última palabra, añadir "..."
- Cortar todo el texto "hasta la palabra" y poner antes "..."
- etc.
Son ejemplos, aunq el segundo creo que se podría hacer también con expr. regulares.
Pues en este caso no se ha preguntado por la posición, sino algo que se asemeje al operador LIKE de mysql
Cita de: Shell Root en 23 Noviembre 2014, 02:34 AM
Pues si quieres esa consulta no usaría LIKE,
SELECT * FROM tabla WHERE campo = 'test';
Pues porque necesitas la posición, pero cuando necesitas sólo sacar registros con x caracteristicas que?
Bueno me he olvidado los %. Sería algo como esto:
SELECT * FROM tabla WHERE campo LIKE '%test%'
Adaptable tambien para '%test' y 'test%'. Todo depende de que tipo de query necesita.
Cita de: MinusFour en 22 Noviembre 2014, 19:58 PM
Podrias usar strpos:
if(strpos($texto, $busqueda) !== false) {
echo 'ocurrencia detectada';
}
Bueno, esto es exactamente lo que buscaba, algo que me diga si esta o no, claro que por la complejidad del idioma he tenido que "arreglar" las cadenas de texto y para completarlo como puso Dimitrix lo muestro de forma diferente.
Cita de: dimitrix en 23 Noviembre 2014, 02:52 AM
Por eso he dicho "en ocasiones", en ocasiones lo puedo necesitar para virsas cosas, como por ejemplo:
- Si es la última palabra, añadir "..."
- Cortar todo el texto "hasta la palabra" y poner antes "..."
- etc.
Son ejemplos, aunq el segundo creo que se podría hacer también con expr. regulares.
Por cierto, un poco offtopic pero preg_match tambien te permite obtener las posiciones de los strings y en ese sentido es mucho más completo que strpos.
http://codepad.viper-7.com/FTB827
Cita de: MinusFour en 23 Noviembre 2014, 17:27 PM
Por cierto, un poco offtopic pero PHP tambien te permite obtener las posiciones de los strings y en ese sentido es mucho más completo que strpos.
http://codepad.viper-7.com/FTB827
Calla, los mayores estamos hablando xDDDDD
Ahora en serio, el problema es que eso sólo te sirve para un carácter ^^