Как сделать strpos нечувствительным к регистру - PullRequest
41 голосов
/ 22 июля 2011

Как я могу изменить strpos, чтобы сделать его без учета регистра.Причина в том, что если product->name - это MadBike , а поисковый термин - bike , то он не будет отображать мне ссылку.Моя главная проблема - скорость кода.

<?php
$xml  = simplexml_load_file('test.xml');
$searchterm = "bike";
foreach ($xml->product as $product) {
if (strpos($product->name, $searchterm) !== false ) {
echo $product->link;
} }
?>

Ответы [ 4 ]

93 голосов
/ 22 июля 2011

Вы ищете stripos()

Если это не доступно для вас, то сначала наберите strtolower() для обеих строк.

EDIT

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).

10 голосов
/ 22 июля 2011

http://www.php.net/manual/en/function.stripos.php

stripos () не чувствительны к регистру.

1 голос
/ 08 января 2016

сделать имена и $ searchterm строчными перед $ strpos.

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

if(strpos($haystack, $needle) !== false){  
    echo "Match = ".$product->link."<br />;
}
1 голос
/ 29 марта 2013

'i' in stripos () означает нечувствительный к регистру

if(stripos($product->name, $searchterm) !== false){ //'i' case insensitive
        echo "Match = ".$product->link."<br />;
    }
...