Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: peib0l en 22 Noviembre 2014, 17:42 PM

Título: Operador LIKE para PHP [Solucionado]
Publicado por: peib0l en 22 Noviembre 2014, 17:42 PM
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
Código (php) [Seleccionar]

if(strpos($texto, $busqueda) !== false) {
  echo 'ocurrencia detectada';
}

Título: Re: Operador LIKE para PHP
Publicado por: Shell Root en 22 Noviembre 2014, 17:47 PM
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
Título: Re: Operador LIKE para PHP
Publicado por: dimitrix en 22 Noviembre 2014, 17:52 PM
Expresiones regulares:


Código (php) [Seleccionar]
<?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);
?>

Título: Re: Operador LIKE para PHP
Publicado por: MinusFour en 22 Noviembre 2014, 19:58 PM
Podrias usar strpos:

Código (php) [Seleccionar]

if(strpos($texto, $busqueda) !== false) {
  echo 'ocurrencia detectada';
}
Título: Re: Operador LIKE para PHP
Publicado por: 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...  ;-)
Título: Re: Operador LIKE para PHP
Publicado por: dimitrix en 23 Noviembre 2014, 01:09 AM
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.
Título: Re: Operador LIKE para PHP
Publicado por: MinusFour en 23 Noviembre 2014, 01:20 AM
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:

Código (sql) [Seleccionar]

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
Título: Re: Operador LIKE para PHP
Publicado por: Shell Root en 23 Noviembre 2014, 02:34 AM
Pues si quieres esa consulta no usaría LIKE,
Código (sql) [Seleccionar]
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?
Título: Re: Operador LIKE para PHP
Publicado por: dimitrix en 23 Noviembre 2014, 02:52 AM
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.
Título: Re: Operador LIKE para PHP
Publicado por: Shell Root en 23 Noviembre 2014, 02:59 AM
Pues en este caso no se ha preguntado por la posición, sino algo que se asemeje al operador LIKE de mysql
Título: Re: Operador LIKE para PHP
Publicado por: MinusFour en 23 Noviembre 2014, 05:37 AM
Cita de: Shell Root en 23 Noviembre 2014, 02:34 AM
Pues si quieres esa consulta no usaría LIKE,
Código (sql) [Seleccionar]
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:

Código (mysql) [Seleccionar]

SELECT * FROM tabla WHERE campo LIKE '%test%'


Adaptable tambien para '%test' y 'test%'. Todo depende de que tipo de query necesita.
Título: Re: Operador LIKE para PHP
Publicado por: peib0l en 23 Noviembre 2014, 09:38 AM
Cita de: MinusFour en 22 Noviembre 2014, 19:58 PM
Podrias usar strpos:

Código (php) [Seleccionar]

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. 
Título: Re: Operador LIKE para PHP
Publicado por: MinusFour en 23 Noviembre 2014, 17:27 PM
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
Título: Re: Operador LIKE para PHP
Publicado por: dimitrix en 23 Noviembre 2014, 17:28 PM
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 ^^