2011-02-06 12 views
7

Chcę instrukcji if, która używa tak samo jak mysql something LIKE '%something%'PHP Podobna do MySQL Jak, dla instrukcji if?

Chcę zbudować instrukcję if w php.

if ($something is like %$somethingother%) 

Czy to możliwe?

Powodem, dla którego zadaję to pytanie jest to, że nie chcę zmieniać polecenia MySQL, jest to długa strona z wieloma rzeczami, nie chcę tworzyć dla tego innej funkcji.

Daj mi znać, jeśli to możliwe, jeśli to możliwe, to jak to zrobić.

Odpowiedz

18

if ($ coś jest jak% $ somethingother%)

jest to możliwe?

nie.

nie chcę zmienić polecenia MySQL, to długa strona z wielu rzeczy na nim

użytkowania jakiś dobry edytor, który obsługuje wyrażeń regularnych w znalezisku & zastąpić, a następnie włącz je coś takiego:

if(stripos($something, $somethingother) !== FALSE){ 

} 
+2

strpos było idealne :) – friendishan

2

Zastosowanie funkcji, że ciąg wyszukiwania w inny ciąg, takich jak: strstr, strpos, substr_count.

12

wiem, to pytanie nie jest rzeczywisty, ale mam podobny problem rozwiązany :)

Moje rozwiązanie:

/** 
* SQL Like operator in PHP. 
* Returns TRUE if match else FALSE. 
* @param string $pattern 
* @param string $subject 
* @return bool 
*/ 
function like_match($pattern, $subject) 
{ 
    $pattern = str_replace('%', '.*', preg_quote($pattern, '/')); 
    return (bool) preg_match("/^{$pattern}$/i", $subject); 
} 

Przykłady:

like_match('%uc%','Lucy'); //TRUE 
like_match('%cy', 'Lucy'); //TRUE 
like_match('lu%', 'Lucy'); //TRUE 
like_match('%lu', 'Lucy'); //FALSE 
like_match('cy%', 'Lucy'); //FALSE 
+1

Lubię go - małą zmianę. Linia wzoru powinna mieć postać '$ wzorzec = str_replace ('%', '. *', Preg_quote ($ wzór, '/'));'. W przeciwnym razie przednie ukośniki nie zostaną zmienione dla preg_match(). –

+0

Zaktualizowałem swoją odpowiedź. Dzięki @JohnReid! –

0

Ale trzeba będzie dać małą ciąg to będzie działać dobrze. Przykład funkcji strstr:

$myString = "Hello, world!"; 
echo strstr($myString, "wor");     // Displays 'world!' 
echo (strstr($myString, "xyz") ? "Yes" : "No"); // Displays 'No' 
Powiązane problemy