Это может быть какая-то простая глупость, но я не могу понять это самостоятельно.остановка в первой строке, сопоставленной с использованием strpos() в PHP
Я пытаюсь создать сценарий обнаружения мобильных устройств и имел большой успех. Но при более глубокой проверке я обнаружил, что один из моих предложений IF
, кажется, возвращает TRUE
, но с неправильным совпадением.
У меня есть этот массив:
private $arrAgent = array(
'sony',
'symbian',
'nokia',
'samsung',
'mobile',
'windows ce',
'blackberry',
'ericsson',
'danger',
'palm',
'series60',
'palmsource',
'pocketpc',
'smartphone',
'vodafone',
'iphone',
'ipad',
'android'
);
тогда у меня есть функция, которая будет цикл массива и найти, если он соответствует
private function detectMobileAgent() {
if ($this->MobileDevice === false) {
foreach ($this->arrAgent as $key => $value) {
if (strpos(Server::userAgent(), $value) !== false) {
$this->MobileDevice = true;
// echo $value;
break;
}
}
}
}
Теперь проблема в том, что я нашел ошибку в IPad/iPhone userAgent, который мешает мне получить четкое чтение.
Агент пользователя IPad выглядит следующим образом:
mozilla/5.0 (ipad; u; cpu os 4_3_2 like mac os x; en-us) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8h7 safari/6533.18.5
я получил, что из имитатора IOS, которая поставляется с Xcode, на моем фактическом IPad я видел почти идентичный агент пользователя, только версию операционной системы и сафари версии были разными.
Теперь моя проблема в том, что в этом пользовательском агенте строковая позиция возвращает совпадение для ipad
AND mobile
, как я могу заставить его остановиться после того, как первая строка будет соответствовать?
By «остановить» вы имеете в виду, чтобы получить самый левый матч строки? – mario
Любая конкретная причина, по которой вы не используете [WURFL] (http://wurfl.sourceforge.net/)? –
ya, но, как указывает Джон Флэнстс, что, поскольку у меня есть термин mobile перед моим ipad, тогда цикл будет ломаться после поиска первого совпадения. – Eli