Как сделать strpos нечувствительным к регистру
Как я могу изменить strpos, чтобы сделать его без учета регистра. Причина в том, что если product->name
это MadBike, и поисковый термин - это байк, он не будет отражать мне ссылку. Моя главная проблема - это скорость кода.
<?php
$xml = simplexml_load_file('test.xml');
$searchterm = "bike";
foreach ($xml->product as $product) {
if (strpos($product->name, $searchterm) !== false ) {
echo $product->link;
} }
?>
4 ответа
Ты ищешь stripos()
Если это не доступно для вас, просто позвоните strtolower()
сначала в обе строки
РЕДАКТИРОВАТЬ:
stripos()
не будет работать, если вы хотите найти подстроку с диакритическим знаком.
Например:
stripos("Leży Jerzy na wieży i nie wierzy, że na wieży leży dużo JEŻY","jeży");
возвращается false
, но он должен вернуться int(68)
,
http://www.php.net/manual/en/function.stripos.php
stripos () не чувствителен к регистру.
'i' в stripos() означает, что регистр не учитывается
if(stripos($product->name, $searchterm) !== false){ //'i' case insensitive
echo "Match = ".$product->link."<br />;
}
Сделайте и name & $searchterm строчными перед $strpos.
$haystack = strtolower($product->name);
$needle = strtolower($searchterm);
if(strpos($haystack, $needle) !== false){
echo "Match = ".$product->link."<br />;
}