Палец вверх 1
Перевод
Перевод

Поиск по ключевому слову в текстовом файле

Я работаю над сценарием поиска 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

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

php search
задан user1062058 5 мар. 2012 г., 21:20:20
источник

2 ответа

Решение 2
Перевод
Перевод

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

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

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

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

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

ответ дан jeroen 5 мар. 2012 г., 21:55:29
источник
Палец вверх 1
Перевод
Перевод

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

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

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

ответ дан Gregor 5 мар. 2012 г., 21:52:55
источник