2016-07-07 25 views
0

私はウェブサイトを作っています。私たちが必要とするのは、ユーザーの興味を最大限に引き出すことです。ユーザの関心は、フィールド「関心」のテーブル「ユーザ」に格納されます。strposが正しく動作しない

ここで、記事には異なる興味がタグ付けされ、ユーザーの関心に一致する記事が表示されます。記事はタグ付きの表に保存されます。だから私たちはすべての記事のタグを取得し、ユーザーの興味を選択します。記事に興味がある場合、コードはtrueを返し、そうでない場合はfalseを返します。

$select = "SELECT * from users where username='$username'"; 
$query = mysqli_query($dbc, $select) or die(mysqli_error($dbc)); 

while ($result = mysqli_fetch_array($query)) { 
    $interests = explode(",",$result['interests'],40); 
    foreach($interests as $interest) { 

     $select1 = "SELECT * from tagged"; 
     $query1 = mysqli_query($dbc, $select1) or die(mysqli_error($dbc)); 
     while ($result1 = mysqli_fetch_array($query1)) { 
      echo "Interests:".$interest."<br>"; 
      echo "Tags:".$result1['tags']."<br>"; 
      $pos = strpos($result1['tags'], $interest); 
      if ($pos===true) { 
       echo "Result:true<br>"; 
      } else { 
       echo "Result:false<br>"; 
      } 
     } 
    } 
} 

利害リストはので、私はそれを抽出し、配列にそれを爆発してからstrpos()機能を使って記事のタグ内の配列要素の位置を見つけ、実際にカンマで区切られています。しかし、たとえそれらがfalseであっても、すべての結果はtrueと表示されます。

The resultのようになります。

+1

のようなものでなければなりませんか?マニュアルをよくお読みください。 – Raptor

+0

それは真実を返さない。しかし、それは偽を返す。もしそれを逆転すれば...私は真実になるだろう。そうではない? –

+1

Strposは、開始位置から通常0の文字列を返します。 $ pos!== falseを使うと、$ posが0でないことに相当します。意味が見つかりません。 –

答えて

2

関数strposは、針が存在する位置を乾草ストリングの開始位置に対して返します。針が見つからなかった場合にそうでない場合、FALSE:

if ($pos!==false) { 
    echo "Result:true<br>"; 
} else { 
    echo "Result:false<br>"; 
} 
0

使用stripos()

stripos()関数は、別の文字列内の文字列の最初の発生の位置を見つけます。

文字列が最初に見つかった位置を別の文字列の中で返します。文字列が見つからない場合は、FALSEを返します。注:文字列の位置は、0ではなく1から始まります。

注:stripos()関数は大文字と小文字を区別しません。

と条件が `strpos()` `復帰true`にいこの

if ($pos!==false) { 
     .............. 
    } else { 
     .............. 
    } 
関連する問題