2012-03-05 4 views
1

私は、ウェブサイト上のパッケージのテキストファイルリポジトリをスキャンし、それぞれの一致のURLを返すPHP検索スクリプトに取り組んでいます。テキストファイルには、以下のようになります。以下のようにテキストファイル内のキーワードを検索する

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 name:package_two"と入力するのではなく、 "package_two"または単に "two"や "tw"のように入力するのではなく、コードを変更する方法を知りたいのですが。どのくらいの微調整が必​​要でしょうか?

また、結果のURLをすべて1つの文字列に連結する変数を作ったので、 "package_one"が検索された場合、2つのURLが返されます...私はコードをそのまま1つのURLを生成します。

**パッケージ名が一致した直後に、 "PACKAGE LOCATION:"の次の文字列が見つかります。 URLを取得する

すべての入力をいただきありがとうございます!

答えて

2

あなたは完全一致を探しています:

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

あなたの検索文字列が行に表示されたかどうかを確認するためにstriposを使用することができます:あなたが!==が必要

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

注意比較するとstriposは0と評価できるので

+0

あなたはどこに行くのか分かります。ユーザーが "package_tw"と入力した場合、それを "package_two"の一致として扱う方法はありますか?また、私が爆発するのは簡単で可能なのだろうか?ファイル全体を整理して、各行が配列インデックスであったので、私はstripos()を実行することができました。その行の索引を検索して追加し、preg_replace()を使用します。出力から "LOCATION:"部分を削除するには?ありがとう、ジェロ! – user1062058

+0

@ user1062058 'package_tw'は上記のコードで' package_two'、 'package_twenty'、' PACKAGE_twO'などとマッチします。他の質問については検索部分とは無関係のようですので、別の質問元のもので探している正確な出力を指定することができます。 – jeroen

+0

よろしくお願いします。私はここで私の質問は、このトピックについては、あなたの答えは、他の人に多くの助けになることを検索するときにGoogleで#3ランクされている気づいた。良い一日を。 – user1062058

1

はstrpos()関数を見てください:

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

検索文字列(針)は干し草の山(現在の入力ライン)内にある場合には、チェックします。ここで http://php.net/manual/en/function.strpos.php

+0

ありがとう、私はstrpos() ;今すぐ! – user1062058

+0

ユーザー入力の場合、大文字と小文字を区別しないので、他の回答のstripos()がより良い解決策であるようです。 – Gregor

関連する問題