Как сделать strpos нечувствительным к регистру

Как я могу изменить strpos, чтобы сделать его не чувствительным к регистру. Причина если product->name is 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 />;
    }

сделайте оба имени & $ searchterm строчными до $strpos.

$haystack = strtolower($product->name);
$needle = strtolower($searchterm);

if(strpos($haystack, $needle) !== false){  
    echo "Match = ".$product->link."<br />;
}