2013-02-04 76 views
1

我有以下代碼:使用strpos來比較陣列

if ((strpos($page,array('careers','employers','specialist-areas','job-search','job-details','job-apply','register-your-cv') == true))) { echo ' class="selected"'; } 

這應該是尋找陣列到$page變量在任何匹配。

但是它不工作...我使用的strpos錯的陣列?

什麼$page可能包含一個例子:"default careers page"

+0

'strpost'的原型:'INT strpos(字符串$草堆,混合$針[摘要$偏移= 0])'。關於第二個參數文檔:'如果needle不是一個字符串,它被轉換成整數,並作爲character.' – Leri

+0

如果'$ page'多個項目從陣列相匹配的序數值應用? –

回答

1

使用此代碼:

$array = array(
    'careers', 
    'employers', 
    'specialist-areas', 
    'job-search', 
    'job-details', 
    'job-apply', 
    'register-your-cv', 
); 

foreach($array as $string) { 
    if((strpos($page,$string) !== false)) { 
     echo ' class="selected"'; 
    } 
} 
+1

你能把所有東西都放在一條線上,而不是兩條,因爲現在它仍然是可讀的。 – PeeHaa

+0

完成。我嘗試過,它的工作原理 – Megadv

1

Strpos是內部串找到字符串。你需要的是in_array。 編輯:誤解了你的問題。下面是代碼,應該工作。

if((count(array_intersect(array('careers','employers','specialist-areas','job-search','job-details','job-apply','register-your-cv'), explode(' ', $page))))) 
{ 
    echo ' class="selected"'; 
} 
1

你需要尋找$page在陣列中的每個元素,所以你需要某種形式的功能是這樣的:

function strpos_array($haystack, $needles) { 
    if (is_array($needles)) { 
     foreach ($needles as $str) { 
      if (is_array($str)) { 
       $pos = strpos_array($haystack, $str); 
      } else { 
       $pos = strpos($haystack, $str); 
      } 
      if ($pos !== FALSE) { 
       return $pos; 
      } 
     } 
    } else { 
     return strpos($haystack, $needles); 
    } 
} 
if (strpos_array($page, $pages) !== FALSE) { 
    echo ' class="selected"'; 
} 

此外,請確定你不是這樣的代碼:

if (strpos($page, $url) == true) {} 

因爲如果$page位於$url的開頭,則strpos將返回0,從而導致比較失敗。