2011-07-22 22 views
37

Strposu, büyük/küçük harfe duyarlı hale getirmek için nasıl değiştirebilirim? Nedeni, product->nameMadBike ve arama terimi bisiklet ise bağlantıyı yankılamıyor. Başlıca endişem, kodun hızı. Bu sana mevcut değilseStrpos büyük/küçük harfe duyarlı olmayan nasıl yapılır

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

cevap

64

Daha sonra sadece ilk ikisi dizeleri üzerinde strtolower() çağrı stripos()

arıyoruz.

DÜZENLEME: Eğer aksan işareti ile substr bulmak istediğinizde

stripos(), çalışmaz.

Örneğin

: yanlış

stripos("Leży Jerzy na wieży i nie wierzy, że na wieży leży dużo JEŻY","jeży"); döner, ancak int gerekir (68).

+0

Strpos kadar hızlı mı? – EnexoOnoma

+3

Hayır, ancak strtolower() 'nı kullanmaktan biraz daha hızlıdır; ortalama olarak, ('stripos') 2.5 kat daha uzun sürüyor (strpos'dan). Daha sonra yine de, bunu saniyede bir milyon kez yapabilirsin, bu yüzden bu konuda çok fazla endişelenmem. - Prematüre optimizasyon tüm kötülüklerin köküdür. – Dereleased

+0

Teoride, çözüm bulunamaz, çünkü yapılacak daha fazla karşılaştırma vardır. Ama burada bazı veriler: http://lzone.de/articles/php-string-search.htm – Turnsole

1

'i'yılında stripos()

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

duyarsız durumda demektir $ strpos önce küçük harfli hem isim & $ searchterm olun.

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

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