Поиск по ключевому слову в текстовом файле - PullRequest
1 голос
/ 05 марта 2012

Я работаю над сценарием поиска PHP, который сканирует хранилище пакетов текстового файла на веб-сайте и возвращает URL каждого совпадения. Текстовые файлы выглядят следующим образом:

PACKAGE NAME: package_one
PACKAGE LOCATION: ./package_one
PACKAGE VERSION: 0.1.2

PACKAGE NAME: package_two
PACKAGE LOCATION: ./package_two
PACKAGE VERSION: 0.2.1

PACKAGE NAME: package_three
PACKAGE LOCATION: ./package_three
PACKAGE VERSION: 1.3.4

PACKAGE NAME: package_one
PACKAGE LOCATION: ./package_one
PACKAGE VERSION: 0.1.2

Мой поисковый скрипт в настоящее время выглядит следующим образом:

<?
$search = $_POST['search']; //Passed from a user input form

$data_file = file('http://www.example.com/data_file.txt'); //The text file repository

    $final_concatenated_results = "";

    for ($i = 0, $found = FALSE; isset($data_file[$i]); $i++) {
        if (trim($data_file[$i]) === $search) { 
        $cleanse = trim($data_file[++$i]);
        $output_part_one = strstr($cleanse, '.');
        $output_part_two = "http://www.example.com/packages_repository/".$output_part_one;
        $add_this = "<a href='$output_part_two'>$output_part_two</a>"."<br/>";
        $found = TRUE;
        $final_concatenated_results.=$add_this;
    } }

    if ($found == TRUE) {
        echo $final_results;
    }

    if ($found == FALSE) {
        echo "Error, package not found.";
    }
?>

Например, если бы "ПАКЕТ ИМЯ: package_two" было набрано дословно, это был бы вывод - http://www.example.com/packages_repository/./package_one, который отлично работает.

В идеале я хотел бы знать, как изменить свой код, чтобы вместо ввода «ИМЯ ПАКЕТА: package_two» можно было просто ввести «package_two» или даже что-то вроде «two» или «tw». Сколько нужно настроить?

Кроме того, я создал переменную для объединения всех полученных URL-адресов в одну строку, поэтому при поиске «package_one» будет возвращено два URL-адреса ... Не думаю, что я сделал код правильно, поскольку он только производит один URL.

** Я должен упомянуть, что сразу после сопоставления имени пакета он находит следующую строку, следующую за "PACKAGE LOCATION:." захватить URL

Любой вклад приветствуется, спасибо!

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Здесь вы ищете точное совпадение:

if (trim($data_file[$i]) === $search) { 

Вы можете использовать stripos, чтобы увидеть, появляется ли строка поиска в строке:

if (stripos($data_file[$i], $search) !== FALSE) {

Обратите внимание, что вам нужно сравнение !==, потому что stripos может оценить до 0.

1 голос
/ 05 марта 2012

Посмотрите на функцию strpos ():

if(strpos(trim($data_file[$i],$search) != false)

Он проверяет, находится ли ваша строка поиска (стрелка) внутри стога сена (ваша текущая строка ввода).http://php.net/manual/en/function.strpos.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...