1

私がやろうとしているのは、ユーザーから入力テキストを取得し (たとえば、「Java プログラマー」としましょう)、このユーザー入力を、「Java プログラマーは aいい子だ', '彼は時々ボール遊びをする', 'Java と犬はお互いを憎んでいる', '犬は Java プログラマーではない'

プログラムがユーザークエリのすべての単語に一致する配列内のすべての文字列のリストを出力するように、単語の一致を試みています(順序は重要ではありません)

だから私は以下のコードの出力が欲しい...

「Java プログラマーはいい子だ」「犬は Java プログラマーではない」

これらの用語には、ユーザーが入力したクエリに従って「Java」と「プログラマー」の両方が含まれているため

ここに私が書いたコードがありますが、動作しません。どんな助けでも大歓迎です。

<?php
$relatedsearches = array();
$querytowords = array();
$string = "Java programmer"; //GET INPUT FROM USER
$querywords = (explode(' ', $string));
foreach($querywords as $z)
    {
            $querytowords[] = $z;
            }

//ARRAY THAT STORES MASTER LIST OF QUERIES

$listofsearhches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers');

foreach($listofsearhches as $c)
    {
    for ($i=0; $i<=(count($querytowords)-1); $i++)
        {   
        if(strpos(strtolower($c), strtolower($querytowords[$i])) === true)
            { 
            if($i=(count($querytowords)-1))
                {
                $relatedsearches[] = $c;
                } 
            } else { break; }
        }
    }

echo '<br>';
if(empty($relatedsearches))
    {
        echo 'Sorry No Matches found';
    } 
    else 
    {
    foreach($relatedsearches as $lister)
        {
                echo $lister;
                echo '<br>';
                }
            }

?>
4

3 に答える 3

0
<?php
    $string = "Java programmer"; //GET INPUT FROM USER
    $querywords = (explode(' ', $string));
    $relatedsearches = array();
    $listofsearhches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers');
    foreach ($listofsearhches as $c) {
        foreach($querywords as $word){
            if(strpos(strtolower($c), strtolower($word)) !== false){
                if(!in_array($c, $relatedsearches))
                    $relatedsearches[] = $c;     

                break;
            }
        } 
    }

    echo '<br>';
    if (count($relatedsearches) < 1) {
        echo 'Sorry No Matches found';
    } 
    else {
        foreach ($relatedsearches as $lister) {
            echo $lister;
            echo '<br>';
        }
    }
?>

試してごらん

于 2012-09-27T15:22:26.317 に答える
0

$string「Javaプログラマー」という文字列として「java」と「programmer」の両方の単語を探しているので、を分解する必要はありません。だからあなたのforeachはこのように見える必要があります

 foreach($listofsearhches as $c)
{   
    if(strpos(strtolower($c), strtolower($string)) === true)
        {            
            $relatedsearches[] = $c;

        } else { break; }

}
于 2012-09-27T15:05:26.360 に答える
0

私はこのようなことをします:-

$matches = array();
$string = 'java programmer';
$stringBits = explode(' ', $string);
$listOfSearches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers');

foreach($listOfSearches as $l) {
  $match = true;
  foreach($stringBits as $b) {
    if(!stristr($l, $b)) {
      $match = false;
    }
  }
  if($match) {
    $matches[] = $l;
  }
}

if(!empty($matches)) {
  echo 'matches: ' . implode(', ', $matches);
} else {
  echo 'no matches found';
}

したがって、検索する文字列のリストをループし、フラグ ( $match) を設定すると、チェック内のすべての単語が$string現在の$listOfSearches文字列のどこかに存在し、単語が存在しない場合は$matchfalse に設定されます。

すべての単語をチェックした後、$matchまだである場合は、配列trueから現​​在の文字列に追加します。$listOfSearches$matches

于 2012-09-27T15:09:52.973 に答える