-2

私がやりたいことは、次のようなファイルがあることです。

Blue = 1 = No = 20,
Arctic color = 2 = No = 20,
Pink = 3 = No = 20,
Arctic blue color = 4 = No = 20,
Red = 5 = No = 20,
Orange = 6 = No = 20,

ユーザーが「北極の色」というフレーズをフォームに入力するとします。コードで実行したいのは、「北極の色」という語句が含まれるすべての行を表示することです。したがって、コードはエコーする必要があります。

Arctic color = 2 = No = 20,
Arctic blue color = 4 = No = 20,

どうすればこれを達成できますか?どんな助けでも大歓迎です!

4

1 に答える 1

1

構造化データを何らかのデータベースに保存することをお勧めします。たとえば、mysql. LIKE次に、クエリを発行するだけです。左側にワイルドカードを使用すると、テーブル全体のスキャンが実行されますが、行数によっては問題にならない場合があります。

より高性能なソリューションが必要な場合は、データをより簡単に検索できる形式に変換する必要があります。


正確な質問に対する解決策が必要な場合:

すべての単語を含む行を検索するには:

$query = 'arctic color';

$terms = array_filter(array_map('trim', explode(" ", $query)));
$results = array();

foreach(file('file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
    $found = true;

    foreach($terms as $term) {
        if(strpos($line, $term) === false) {
            $found = false;
            break;
        }
    }

    if($found) {
        $results[] = $line;
    }
}

print_r($results);

次の単語の一部を含む行を検索します。

$query = 'arctic color';

$terms = array_filter(array_map('trim', explode(" ", $query)));
$results = array();

foreach(file('file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
    $found = false;

    foreach($terms as $term) {
        if(strpos($line, $term) !== false) {
            $found = true;
            break;
        }
    }

    if($found) {
        $results[] = $line;
    }
}

print_r($results);
于 2012-06-09T01:48:40.210 に答える