2009-10-30 12 views
43

Próbuję porównać słowa dla równości, a wielkość liter (górna i dolna) jest nieistotna. Jednak PHP się nie zgadza! Wszelkie pomysły, jak zmusić PHP do ignorowania przypadku słów podczas porównywania ich?Ignoruj ​​wielkość liter podczas porównywania napisów w PHP

$arr_query_words = array("hat","Cat","sAt","maT"); 
// for each element in $arr_query_words - 
for($j= 0; $j < count($arr_query_words); $j++){ 

    // Split the $query_string on "_" or "%" : 
    $story_body = str_replace($arr_query_words[ $j ], 
     '<span style=" background-color:yellow; ">' . $arr_query_words[ $j ] . '</span>', 
       $story_body); 

// --- This ONLY replaces where the case [upper or lower] is identical -> 
} 

Czy istnieje sposób przeprowadzenia wymiany, nawet jeśli sprawa jest inna?

+0

zaktualizowałem moją odpowiedzią na to, co mamy nadzieję odpowiedzieć próbowałeś zapytać! –

Odpowiedz

69

Zastosowanie str_ireplace przeprowadzić wymianę bez uwzględniania wielkości liter ciąg (str_ireplace jest dostępna od PHP 5):

$story_body = str_ireplace($arr_query_words[$j], 
    '<span style=" background-color:yellow; ">'. $arr_query_words[$j]. '</span>', 
    $story_body); 

do Case-insensitively porównać strun, używanie strcasecmp:

<?php 
$var1 = "Hello"; 
$var2 = "hello"; 
if (strcasecmp($var1, $var2) == 0) { 
    echo '$var1 is equal to $var2 in a case-insensitive string comparison'; 
} 
?> 
+3

Dobrze wiedzieć :) Zawsze robiłem strtolower ($ var1) == strtolower ($ var2), aby zrobić niewrażliwe na wielkość porównania – Aishwar

+0

Dokładnie, jak bym to zrobił. Do regularnego porównywania ciągów zawsze używam jego "strcmp", który jest wrażliwy na wielkość liter, nigdy nie można być zbyt ostrożnym przy luźnym pisaniu PHP. –

+4

W zależności od tego, co porównujesz, możesz dodać przycięcie, aby wyczyścić spacje. jeśli (strcasecmp (przycinanie ($ var1), przycinanie ($ var2)) == 0) {} –

14

Najprostszym i najszerzej wspieranym sposobem osiągnięcia tego jest ewentualnie małe litery gs przed porównując je, tak jak poniżej:

if(strtolower($var1) == strtolower($var2)) { 
    // Equals, case ignored 
} 

może chcesz przyciąć ciągi są porównywane, wystarczy użyć czegoś takiego, aby osiągnąć tę funkcjonalność:

if(strtolower(trim($var1)) == strtolower(trim($var2))) { 
    // Equals, case ignored and values trimmed 
} 

Nadzieja to pomaga!

+1

Metoda strtolower jest bardzo powszechna, a sugestia przycinania jest zdecydowanie przydatna, dzięki – Andrew

4
$var1 = "THIS is A teST"; 
$var2 = "this is a tesT"; 
if (strtolower($var1) === strtolower($var2)) { 
    echo "var1 and var2 are same"; 
} 

strtolower konwertuje ciąg znaków na małe

-2

zawsze wystarczy dodać różnicę ascii pomiędzy górną i dolną przypadku do dolnej części obudowy znaków.

+2

Nie będzie działać w językach innych niż angielski ... – jou

0
!strcasecmp($str1, $str2) 

strcasecmp zwraca 0 tylko wtedy, gdy ciągi są równe ignorując sprawę, tak! Strcasecmp return true, jeśli są one równe ignorując sprawę, w przeciwnym wypadku false

http://php.net/manual/en/function.strcasecmp.php

+0

Jestem ciekawy, dlaczego to zostało odrzucone? –

+0

może niektórzy puriści nie lubią! 0 i wolą! = 0, nie jestem jednym z nich i wolę mniejszy kod: D –

Powiązane problemy