2011-08-02 10 views
0

私は少しジレンマがあり、以下のコードがなぜ機能していないのか理解できないようです。phpで文字列内の文字列を検索していますか?

function find($haystack, $needles) { 
    $needle = array_map('trim', explode(",", $needles)); 
    foreach ($needle as $key => $value) { 
     if (strpos($haystack, $value) !== false) { 
      return true; 
     } 
    } 
    return false; 
} 

私は、特定のページに表示されるべきかの要素を決定したり、特定の要素にクラスを追加する方法として、次のコードを使用しています。たとえば、私は$section = "home"場合、クラス電流を追加する

<?php if (find($section, "home")) { ?> class="current"<?php } ?> 

を使用します。私はではなく、選択

<?php if (!find($section, "contact")) { ?> 

を上のすべてのページ上の要素を表示したい場合、私はまた、特定の例

<?php if (find($section, "about, media")) { ?> 

ための複数のページ上の要素と同じを表示するには、この機能を使用することができますし、最後にそれができます例えば、複数の変数で使用することができます。

<?php if (find($page, "news") || find($section, "news")) { ?> 

それは私が文の場合、失敗すると思われるページの選択から要素を削除するために、より複雑なを作成しようとする機能を使用するときにあれば、この例では、変数とif文は次のようになりますニュースセクションページやニュースの投稿ページ:

<?php if (!find($page, "news") || !find($section, "news")) { ?> 

$page = "news"$section = "media news section"
$page = "post"$section = "media news post dynamic"

なぜ私はこれらの特定のステートメントではfalseを返さないのか分からない。どんな助けもありがたく、より良い方向性/方法を歓迎します。多くの感謝

答えて

2

最初の変数セットではfalseを返し、2番目のセットではtrueを返します($ pageには 'news'が含まれていないため)。コードは期待通りに機能します。

あなたは両方の条件が真でなければなりませんように、それは、両方の場合にはfalseを返すAND&&)にOR||)を変更したい場合(単語のニュースはどちらかで見つけてはいけません)。

if (!find($page, "news") && !find($section, "news")) { 
+0

私は、それがうまくいかない理由を見ていますが、この例の目的はどちらの変数セットでもfalseを返すことです。 if文を書き換えてfalseを返すにはどうすればよいですか? –

+0

'if(!find($ page、" news ")&&!find($ section、" news ")){' –

+0

ありがとうございました!とてもシンプルに見えますが、最初は私の頭の中を包み込むことができませんでした。 –

関連する問題