2011-07-22 52 views
37

如何更改strpos使其不区分大小写。原因是如果product->nameMadBike和搜索项是自行车它不会回应我的链接。 我主要关心的是代码的速度。如何使strpos不区分大小写

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

回答

64

您正在寻找stripos()

如果无法提供给你,然后只需拨打两个字符串strtolower()第一。

编辑

stripos()将无法​​正常工作,当你想找到与变音符号SUBSTR。

例如:

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

+0

跟strpos一样快吗? – EnexoOnoma

+3

不,但它比首先使用strtolower()要快一些;平均而言,它('stripos')似乎比“strpos”长约2.5倍。再说一次,你仍然可以每秒执行一百万次('stripos'),所以我不会担心这一点 - 不成熟的优化是万恶之源。 – Dereleased

+0

理论上,没有解决办法,因为要进行更多的比较。但这里有一些数据:http://lzone.de/articles/php-string-search.htm – Turnsole

1

'我'stripos函数()指不区分大小写

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

使之前$ strpos小写两个名字& $搜索关键词。

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

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