0

次のPHP検索スクリプトがあります。
を検索すると1234567、正確なフレーズに一致しますが、最初の 4 文字のみに一致させたいと考えてい1234ます。

説明:

最初の 4 文字をカウントし、それらの最初の文字に一致する結果を表示したい。たとえば、誰かが検索した1234567場合、スクリプトは最初の 4 文字を数え1234、結果を表示する必要があります。同様に、誰かが検索456789した場合、スクリプトは最初の 4 文字をカウントし4567、結果を表示する必要があります。

///explode search term
           $search_exploded = explode(" ",$search);
           foreach($search_exploded as  $search_each)
           {
           //construct query

            $x++;
            if ($x==1)
               $construct .= "keywords LIKE '%$search_each%'";
           else
              $construct .= " OR keywords LIKE '%$search_each%'";

           }


     //echo out construct

    $construct = "SELECT * FROM numbers WHERE $construct";
     $run = mysql_query($construct);

     $foundnum = mysql_num_rows($run);

     if ($foundnum==0)
        echo "No results found.";
     {

       echo "$foundnum results found.<p><hr size='1'>";

       while ($runrows = mysql_fetch_assoc($run))
       {
        //get data
        $title = $runrows['title']; 
        $desc = $runrows['description'];
       $url = $runrows['url'];

        echo "<b>$title</b>
             <b>$desc</b>
       <a href='$url'>$url</a><p>";
4

3 に答える 3

1

を次のものに置き換えることができますforeach

foreach($search_exploded as $search_each)
{
    $str = mysql_real_escape_string(substr($search_each, 0, 4));
    //construct query
    $x++;
    if ($x==1) $construct .= "keywords LIKE '$str%'";
    else       $construct .= " OR keywords LIKE '$str%'";
}
于 2012-07-11T07:53:21.707 に答える
0

foreach次のコードをループの先頭に追加します。

if(strlen($search_each) > 4) $search_each = substr($search_each, 0, 4);

このような:

$search_exploded = explode(" ", $search);
foreach($search_exploded as $search_each)
{
    if(strlen($search_each) > 4) $search_each = substr($search_each, 0, 4);
    // your code
}

このコードは、単語が 4 より長い場合、すべての単語の最初の 4 文字を検索します。

于 2012-07-11T07:44:42.597 に答える
0

最初の 4 語のみを使用するように既存のコードを変更するには、ループを少し変更する必要があります。

これを変える-

foreach($search_exploded as $search_each) {

これに -

for($i = 0; $i < min(count($search_exploded), 4); ++$i) {
    $search_each = $search_exploded[$i];
于 2012-07-11T07:27:58.783 に答える