2011-08-02 71 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; 
} 

我使用下面的代碼作爲方法來確定哪些元素應顯示在某些頁面上或向某些元素添加類。例如,我將使用

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

添加類當前如果$section = "home"。我還可以使用此功能以顯示在多個頁面例如

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

和某些元素相同的,如果我想顯示在所有頁面上的元素,但不是在選擇

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

,最後它可以例如用於多個變量。

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

這是當我使用的功能,試圖打造一個更復雜的if語句來從選擇的頁面,它似乎無法刪除元素,在這個例子中,變量和if語句,如果你是這樣的新聞部分頁面或新聞頁面後:

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

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

我無法弄清楚爲什麼這些具體的陳述沒有返回錯誤。任何幫助將不勝感激,或更好的方向/方法是值得歡迎的。非常感謝

回答

2

它對第一組變量返回false,對第二組返回true(因爲$ page不包含'news')。代碼按預期工作。

如果你希望它在這兩種情況下返回false,改變OR||)到AND&&),這樣既條件必須爲真(字新聞不得在任何可以找到)。

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

我很明白爲什麼它可能不工作,但在這個例子中的目標是爲任何一組變量返回false。我如何重寫if語句來返回false? –

+0

'if(!find($ page,「news」)&&!find($ section,「news」)){' –

+0

謝謝!看起來很簡單,剛開始時我的頭就不能包住它。 –