2015-09-13 11 views
8

Jak zapewnić częściowe dopasowanie między ciągiem a tablicą?PHP Match Array against Partial String

Teraz używam składni:

if (!array_search($operating_system , $exclude)) { 

gdzie wartość $ operating_system ma zbędnych szczegółów i nigdy nie będzie tylko bot, indeksowania lub pająk.

Jako przykład wartość $ operating_system jest

"Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" 

$ wyklucza to tablica niechcianych przedmiotów

$exclude = [ 
    'bot', 
    'crawl', 
    'spider' 
]; 

Chciałbym ten przykład niepowodzenie IF ponieważ bot jest zawarty w obu łańcuchach i jest elementem tablicy.

+4

Użyj regexp zamiast listy ciągów. – mario

Odpowiedz

3

Ten kod powinien działać sprawnie.

Wystarczy wywołać funkcję arraySearch z ciągiem agenta użytkownika jako pierwszym parametrem i tablicą tekstu do wykluczenia jako drugi parametr. Jeśli tekst w tablicy znajduje się w ciąg agenta użytkownika, to funkcja zwraca wartość 1. W przeciwnym wypadku zwraca 0.

function arraySearch($operating_system, $exclude){ 
    if (is_array($exclude)){ 
     foreach ($exclude as $badtags){ 
      if (strpos($operating_system,$badtags) > -1){ 
       return 1; 
      } 
     } 
    } 
    return 0; 
} 
3

Oto proste rozwiązanie wyrażenie regularne:

<?php 
$operating_system = 'Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)'; 
$exclude = array('bot', 'crawl', 'spider'); 

$re_pattern = '#'.implode('|', $exclude).'#'; // create the regex pattern 
if (!preg_match($re_pattern, $operating_system)) 
    echo 'No excludes found in the subject string !)'; 
else echo 'There are some excludes in the subject string :o'; 
?> 
+1

Jeśli chcesz, aby _case insensitive_ było zgodne, po prostu wstaw znak 'i' dokładnie po drugim' # ':) – someOne