1

誰かが私が修正できないように見える小さな問題を手伝ってくれるだろうかと思います-私の頭は現在円を描いて回っています...

わかりました。多数の情報行を含む.txtファイルがあります。キーワードをそれらの行と一致させ、特定の数の一致する行を表示しようとしています。

このスクリプトをまとめると、機能しますが、単語が検索単語と同じ順序である場合にのみ1行に一致します。

現時点では例として:

検索ワード:

赤い帽子

.txtファイルの行:

これは私の赤い帽子です
私の帽子は赤いです
この帽子は緑
ですこれは赤いスカーフ
ですあなたの赤い帽子はいいです

スクリプトは現時点で一致し、1、5行目を表示します。

ただし、1、2、5行目を一致させて表示したいのですが

一致させるには、すべての単語を除くすべての順序が存在する必要があります。

私はここや他の場所でたくさんの投稿を調べましたが、必要なのは文字列を分解してループ内の各単語を検索することであると理解していますが、いくつかの異なる方法を試しても、同じ行を何度も。

私が残した髪を失う前に、どんな助けもいただければ幸いです:-)

これが私が現在作業しているコードです-検索変数はすでに設定されています:

<?php
rawurldecode($search);
$search = preg_replace('/[^a-z0-9\s]|\n|\r/',' ',$search);
$search = strtolower($search);
$search = trim($search);

$lines = file('mytextfile.txt') or die("Can't open file");
shuffle($lines);

$counter = 0;

// Store true when the text is found
$found = false;

foreach($lines as $line)
 {

  if(strpos($line, $search) !== false AND $counter <= 4)
  {
    $found = true;
    $line = '<img src=""> <a href="">'.$line.'</a><br>';


    echo $line;
    $counter = $counter + 1;

  }

}

// If the text was not found, show a message
if(!$found)
{
  echo  $noresultsmessage;
}

?>

助けてくれてありがとう-まだ学んでいる:-)

4

1 に答える 1

1

これが私のコードです:

$searchTerms = explode(' ', $search);
$searchCount = count($searchTerms);
foreach($lines as $line)
 {
    if ($counter <= 4) {
        $matchCount = 0;
        foreach ($searchTerms as $searchWord) {
            if (strpos($line, $searchWord) !== false ) {
                $matchCount +=1;
            } else {
                //break out of foreach as no need to check the rest of the words if one wasn't found
                continue; 
            }
        }
        if ($matchCount == $searchCount) {
            $found = true;
            $line = '<img src=""> <a href="">'.$line.'</a><br>';
            echo $line;
            $counter = $counter + 1;
        }

    }
}
于 2012-12-12T20:32:22.890 に答える