Operador LIKE para PHP [Solucionado]

Iniciado por peib0l, 22 Noviembre 2014, 17:42 PM

0 Miembros y 1 Visitante están viendo este tema.

peib0l

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';
}


Shell Root

#1
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
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

dimitrix

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);
?>





MinusFour

Podrias usar strpos:

Código (php) [Seleccionar]

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

Shell Root

MinusFour como vas a comprar el poder de un LIKE o un ExpReg con un simple strpos...  ;-)
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

dimitrix

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.




MinusFour

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

Shell Root

#7
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?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

dimitrix

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.




Shell Root

Pues en este caso no se ha preguntado por la posición, sino algo que se asemeje al operador LIKE de mysql
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.