Menú
Está libre
registro
hogar  /  Firmware/ Cualquier búsqueda php p. Cómo hacer un algoritmo de búsqueda para múltiples palabras en PHP desde una base de datos

Cualquier búsqueda php p. Cómo hacer un algoritmo de búsqueda para múltiples palabras en PHP desde una base de datos

Primero, necesitamos crear una lista de archivos en la que buscaremos la palabra deseada o una combinación de varias palabras. Para ello, cree un archivo files.dat con los nombres de los archivos en los que se realizará la búsqueda.

Como ejemplo: file1.txt dir1 / file2.txt dir2 / file3.txt ... dirn / filen.txt

Puede utilizar las siguientes funciones para la búsqueda: ereg y eregi, así como funciones de búsqueda de incidencias expresiones regulares y sus transformaciones ereg_replace y eregi_replace. Ereg se diferencia de eregi solo en que el primero busca sin distinción entre mayúsculas y minúsculas y el segundo los tiene en cuenta. Pero como buscaremos en texto o archivos html Es preferible que usemos el resaltado de las palabras de búsqueda en la salida, como hacen muchos los motores de búsqueda, y para ello usaremos las dos últimas funciones, es decir ereg_replace y eregi_replace.

Para encontrar la aparición de una palabra en una cadena, que es la forma en que presentaremos nuestros archivos a la función de búsqueda, necesitamos componer la expresión regular correcta, es decir, ¿Cómo sería comprensible la consulta para las funciones ereg_replace y eregi_replace? Para hacer esto, necesita estudiar un poco la sintaxis de las expresiones regulares, pero puede hacerlo en su tiempo libre, y en este caso será algo como esto: " \0 ", es decir, aquí usé etiquetas y para resaltar las palabras encontradas, puede utilizar cualquier otra etiqueta. Como resultado, nuestra función se verá así por ahora:

// $ texto - texto en el que estamos mirando // $ texto_de_búsqueda - palabras de búsqueda // $ use_register - función de uso de caso de búsqueda ($ texto, $ texto de búsqueda, $ use_register = false) (if ($ use_register) // if case- sensible (return ereg_replace ($ texto_búsqueda, " \0", $ texto); // buscar, reemplazar, regresar) else // si no distingue entre mayúsculas y minúsculas (return eregi_replace ($ texto_búsqueda," \0", $ texto); // buscar, reemplazar, devolver) devolver $ resultado; // por si acaso)

También puede escribir otra función para leer el archivo (puede usarlo como la ruta URL al archivo) en la línea:

// $ url = ~ "http://sitename.ru filename /"; // o // $ url = ~ "ftp: // usuario: [correo electrónico protegido]/ filename "; // o // $ url = ~" filename "; función Remote_file_read ($ url) ($ text =" "; $ file = @fopen ($ url," r "); if (! $ file) (return "-1"; echo "EROR"; // puedes borrar exit;) while (! feof ($ file)) ($ line = fgets ($ file, 1024); $ text. = $ line;) fclose ($ archivo); devuelve $ texto;)

Escribimos la función de búsqueda, ahora queda escribir el código para la búsqueda, se verá así:

$ files_file = "files.dat"; $ obrezanie = 100; // cortar la cadena por longitud // $ text - el texto en el que estamos mirando // $ search_text - palabras de búsqueda // $ use_register - función de caso de uso search ($ text, $ search_text, $ use_register = false) (if ( $ use_register) (return ereg_replace ($ texto_búsqueda, " \0", $ texto);) else (return eregi_replace ($ texto_búsqueda," \0", $ texto);) return" ";) function Remote_file_read ($ url) ($ text =" "; [correo electrónico protegido]($ url, "r"); if (! $ archivo) (return "LEER EROR"; salir;) while (! feof ($ archivo)) ($ línea = fgets ($ archivo, 1024); $ texto. = $ línea;) fclose ($ archivo) ; return $ texto; ) function Cut_string ($ text, $ search_text) // Función de corte de texto (global $ obrezanie; $ p = strpos ($ text, " ". $ texto_búsqueda"."); $ p = $ p- $ obrezanie; if ($ p<0) $p=0; $text=substr($text,$p,$obrezanie*2+strlen("". $ texto_búsqueda".")); return $ text;) // Mostrar el formulario de búsqueda echo"

Qué buscar:

Cómo buscar:

Distingue mayúsculas y minúsculas
No distingue entre mayúsculas y minúsculas

"; if (isset ($ Search_text)) // Si se especifica la palabra de búsqueda, continúe ($ found = false; if (! isset ($ type)) $ type = 1; // Compruebe el tipo de búsqueda if ( $ tipo = = 0) $ use_register = true; si no $ use_register = false; $ file = file ($ files_file); $ count = count ($ file); for ($ i = 0; $ i<$count ; $i++) // Проходим по всем файлам указанным в files.dat { $def_text=htmlspecialchars(Remote_file_read(trim($file[$i]))); $return_text=search($def_text,$Search_text,$use_register); if ($def_text!==$return_text) { echo "

".trim ($ archivo [$ i])".

"; echo Cut_string ($ return_text, $ Search_text); echo"
Abra esta página "; echo"


"; } } }

Puede utilizar el código resultante en su sitio sin ningún problema, a pesar de su simplicidad, debería ser suficiente para la mayoría de los sitios pequeños. El principal inconveniente del código es que al buscar en archivos html, es posible que el resultado no se muestre en una forma particularmente legible. Por lo tanto, este script está destinado principalmente a buscar archivos de texto.

Si desea tener en cuenta las palabras entre comillas, entonces necesita una expresión regular como esta:

$ search_expression = "oso manzana \" Tom Cruise \ "o" Mickey Mouse "otra palabra"; $ palabras = preg_split ("/ [\ s,] * \\\" ([^ \\\ "] +) \\\" [\ s,] * | "." [\ s,] * "([ ^ "] +)" [\ s,] * | "." [\ s,] + / ", $ expresión_búsqueda, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); print_r ($ palabras);

Recibirás palabras y frases individuales entre comillas.

Ya me han pedido varias veces que escriba un artículo sobre cómo implementar la búsqueda de sitios a través de PHP... No es una tarea fácil, incluso diría muy difícil, ya que aquí hay una gran cantidad de matices y obstáculos. En este artículo analizaré algoritmo de búsqueda del sitio.

Supongamos que nuestro sitio tiene muchos materiales diferentes (artículos, noticias, notas, etc.). Todo esto está en la base de datos. Y nuestra tarea es implementar una búsqueda en el sitio... El algoritmo más simple es el siguiente:

  1. Crear Formulario HTML con una barra de búsqueda y un botón " Enviar". En el cuadro de texto, los usuarios ingresarán una consulta de búsqueda y luego harán clic en el botón.
  2. Obtener una consulta de búsqueda (generalmente enviada por el método OBTENER, pero a veces también usan CORREO), y también, para protegerse contra XSS, pásalo por la función htmlspecialchars ().
  3. Haga una selección de las tablas correspondientes (con artículos, noticias, notas, etc.) de aquellos registros que contienen la consulta de búsqueda. Estoy mostrando un ejemplo de consulta SQL para tales casos: SELECT * FROM articles WHERE `text_article` LIKE% search% En consecuencia, en lugar de buscar se sustituye la cadena de búsqueda.
  4. Una vez recibidos los registros, los mostramos en la forma deseada, preferiblemente por relevancia. Por ejemplo, lo hice en mi sitio así: donde hay más coincidencias, ese artículo es más relevante, por lo tanto, lo pongo primero. Lo más probable es que este método de evaluación de la relevancia también sea adecuado para usted.

Muchos diréis que aquí no hay nada complicado. Y tendrán razón en parte, sin embargo, veamos este ejemplo de una cadena de búsqueda: " buscando este texto". La pregunta es:" ¿Y qué, de hecho, se busca?". Se está buscando la coincidencia exacta del texto" buscando este texto". O, tal vez, está buscando un texto en el que estén presentes las tres palabras, pero que no se sigan entre sí. O, tal vez, esté buscando un texto en el que al menos una de estas palabras esté presente.

Y aquí la tarea se vuelve mucho más complicada. Puede crear un sistema de sintaxis complejo (como en los motores de búsqueda), por ejemplo, se busca una coincidencia exacta si la consulta se especifica entre comillas. O puede darles a los usuarios la opción de elegir cómo quieren buscar (usando botones de opción). Por lo tanto, se hace en mi sitio web. Por lo tanto, se agrega un elemento más al algoritmo anterior: redactar una consulta SQL... A continuación, se muestra un ejemplo de una consulta SQL, cuando necesita extraer todos los materiales en los que hay al menos una palabra de la consulta " buscando este texto":

SELECCIONAR * FROM artículos DONDE (`artículo_texto` LIKE"% buscando% "O` artículo_texto` LIKE"% this% "O` artículo_texto` LIKE "% texto%")

En consecuencia, en el script de búsqueda debe generar similares Consultas SQL, enviar a la base de datos, recibir la respuesta y generarla. Esto es aún más complicado si muestra publicaciones por relevancia, ya que es difícil saber de inmediato cuál debería ser más relevante: 3 ocurrencias exactas de la consulta, o 10 ocurrencias de partes de la solicitud. En mi sitio, siempre se da preferencia a las ocurrencias exactas, pero este punto ya es bastante controvertido. Por supuesto, es difícil, y si lo haces por primera vez, definitivamente pasarás varias horas. Espero que la mía algoritmo para implementar la búsqueda en el sitio a través de PHP Te ayudará.

(PHP 4> = 4.0.5, PHP 5)

array_search - Búsquedas valor dado en una matriz y devuelve la clave correspondiente en caso de éxito

Descripción

mezclado array_search(aguja mixta, arreglo pajar [, bool estricto])

Busca una aguja en el pajar y devuelve la clave, si está presente en la matriz, FALSO de lo contrario.

Comentario: Si la aguja es una cuerda, se realiza una comparación sensible a mayúsculas y minúsculas.

Comentario: Antes de PHP 4.2.0, array_search () regresó en caso de falla NULO en lugar de FALSO .

Si pasas el valor CIERTO como un tercer parámetro opcional estricto, la función array_search () también comprobará el tipo de aguja en la matriz del pajar.

Si la aguja aparece más de una vez en el pajar, se devolverá la primera clave encontrada. Para devolver claves para todos los valores encontrados, use la función array_keys () con un parámetro opcional valor_búsqueda.


Ejemplo 1. Ejemplo de uso array_search ()

$ matriz = matriz (0 => "azul", 1 => "rojo", 2 => 0x000000, 3 => "verde", 4 => "rojo"); $ clave = array_search ("rojo", $ matriz ); // $ clave = 1;
$ clave = array_search ("verde", $ matriz); // $ clave = 2; (0x000000 == 0 == "verde")
$ clave = array_search ("verde", $ matriz, verdadero); // $ clave = 3;
?>
Atención

Esta función puede volver como booleana FALSO y un valor no booleano que se convierte en FALSO, por ejemplo 0 o "". Para más información detallada consulte la sección sobre tipo booleano. Utilice el operador === para probar el valor de retorno de esta función.

La mejor forma de mantener a un usuario en un sitio es permitirle encontrar lo que busca. Si crea un sistema conveniente para esto, entonces el nivel de preferencia por su sitio crecerá y el usuario definitivamente regresará para encontrar lo que le interesa.

Le mostraré cómo crear un formulario de búsqueda simple, pero funcionalmente efectivo, que se utilizará para buscar artículos en el sitio. Los resultados aparecerán en la página sin ninguna recarga, lo que sin duda es la mejor manera presentación de información.

Crearé 2 archivos: search.php que contendrán HTML y JavaScript. El segundo archivo, do_search.php, contendrá el código PHP. Comencemos a crear el primer archivo:

PHP, demostración de búsqueda de jQuery

Intente escribir la palabra ajax


resultados para

En este archivo, hemos creado un Formulario HTML que envía una solicitud POST al archivo de back-end do_search.php.

select_list ($ sql); if (contar ($ fila)) ($ end_result = ""; foreach ($ fila como $ r) ($ resultado = $ r ["título"]; $ negrita = " ". $ palabra"."; $ end_result. ="

  • ". str_ireplace ($ palabra, $ negrita, $ resultado)".
  • ";) echo $ end_result;) else (echo"
  • No se encontraron resultados para tu búsqueda.
  • "; } } ?>

    El código PHP contiene comentarios mediante los cuales puede comprender fácilmente cómo funciona el script. Si hay coincidencias en la base de datos, se las muestra a su usuario, resaltando en negrita las palabras que el usuario estaba buscando.

    Démosle a todo algo de CSS:

    Cuerpo (familia de fuentes: Arial, Helvetica, sans-serif;) * (margen: 0; padding: 0;) #container (margin: 0 auto; width: 600px;) a (color: # DF3D82; text-decoration: ninguno) a: hover (color: # DF3D82; text-decoration: underline;) ul.update (list-style: none; font-size: 1.1em; margin-top: 10px) ul.update li (height: 30px; border-bottom: #dedede solid 1px; text-align: left;) ul.update li: first-child (border-top: #dedede solid 1px; height: 30px; text-align: left;) #flash (margin- top: 20px; text-align: left;) #searchresults (text-align: left; margin-top: 20px; display: none; font-family: Arial, Helvetica, sans-serif; font-size: 16px; color: # 000;) .word (font-weight: bold; color: # 000000;) #search_box (padding: 4px; border: solid 1px # 666666; width: 300px; height: 30px; font-size: 18px; -moz- border-radius: 6px; -webkit-border-radius: 6px;) .search_button (border: # 000000 solid 1px; padding: 6px; color: # 000; font-weight: bold; font-size: 16px; -moz- border-radius: 6px; -webkit-border-radius: 6px;) .found (font-weight: bold ; estilo de fuente: cursiva; color: # ff0000; ) h2 (margen derecho: 70px;)

    Ahora ha aprendido a crear un formulario de búsqueda simple que funcione sin recargar la página. Espero que hayas disfrutado el tutorial.