2012-05-10 21 views
0

只是關於性能和可伸縮性的一個簡單問題。 我需要從其用戶代理字符串中識別Android手機的確切型號,然後在模型位於特定列表中時調用頁面。所以我用「stristr」功能和簡單的if條件,以下列方式:搜索字符串並檢查結果是否在使用php的列表中

$ua = $_SERVER['HTTP_USER_AGENT']; 
if (stristr($ua, "Nexus S") || stristr($ua, "GT-I9003") || stristr($ua, "GT-I9000") || stristr($ua, "SGH-T959D") || stristr($ua, "SGH-I897") || stristr($ua, "GT-I9088") || stristr($ua, "GT-I9100") ) { 
     $page = "android_specific.html"; 
     header('Location: ' . $page); 
    } 

所以現在的問題是:是否有一個更優雅,也許更好(快)的方式,使這種比較?我想用一個數組和一個循環?

非常感謝你提前。

+2

一個for循環和數組是指通過整個數組循環,直到找到一個匹配。你目前採取的方法很好。 – 2012-05-10 09:48:13

回答

1

使用數組可以更簡單地更新

$ua = "User agent is Nexus S"; 
$agents = array("Nexus S","GT-I9003"); 
$page = "default.html"; 
foreach ($agents as $agent) 
{ 
    if (stripos($ua,$agent)!==FALSE) 
    { 
    $page = "andriod.html"; 
    break; 
    } 
} 
echo $page; 
+0

感謝gunnx,很好。你認爲這個解決方案比我的服務器請求數量大嗎? – bobighorus

+0

我會建議在這方面運行測試,但我認爲(有人會糾正我,如果不是)strpos比strstr更快 – gunnx

+0

我不知道誰認爲這個響應沒有用(標記爲負值),但它會有幫助,並符合這個社區的精神,知道爲什麼! – bobighorus

相關問題