2009-10-30 9 views
43

Ich versuche, Wörter für Gleichheit zu vergleichen, und die Groß- und Kleinschreibung ist irrelevant. Allerdings scheint PHP nicht zu stimmen! Irgendwelche Ideen, wie man PHP dazu zwingen kann, den Fall von Wörtern zu ignorieren, während man sie vergleicht?Groß-/Kleinschreibung ignorieren beim Vergleichen von Zeichenfolgen in 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 -> 
} 

Gibt es eine Möglichkeit, den Austausch durchzuführen, auch wenn der Fall anders ist?

+0

Ich habe meine Antwort auf hoffentlich aktualisiert zu beantworten, was du hast versucht zu fragen! –

Antwort

69

Verwenden str_ireplace ein Groß- und Kleinschreibung String Ersatz auszuführen (str_ireplace von PHP 5 verfügbar ist):

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

Fall-unsensibel Strings vergleichen, verwenden strcasecmp:

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

Gut zu wissen :) Ich habe schon immer strtolower ($ var1) == strtolower ($ var2) gemacht, um die Groß-/Kleinschreibung zu vergleichen – Aishwar

+0

Genau wie ich es tun würde. Für den regulären String-Vergleich verwende ich immer den Case-Sensitive-Bruder 'strcmp'. Mit PHP's lockerer Typisierung kannst du nie zu vorsichtig sein. –

+4

Je nachdem, was Sie vergleichen, möchten Sie möglicherweise eine Trimmung hinzufügen, um nachfolgende Leerzeichen zu löschen. if (strcasecmp (trimmen ($ var1), trimmen ($ var2)) == 0) {} –

14

Der einfachste und am weitesten verbreitete Weg, dies zu erreichen, ist möglicherweise, beide Strings klein zu halten gs vor ihnen, wie so vergleichen:

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

Vielleicht möchten Sie schneiden die Saiten verglichen werden, verwenden Sie einfach so etwas wie dies diese Funktionalität zu erreichen:

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

hoffe, das hilft!

+1

die strtolower Methode ist sehr verbreitet, und der Trimm Vorschlag ist auf jeden Fall sinnvoll, dank – Andrew

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

strtolower wandelt String

-2

in Klein füge ich immer nur den ascii Unterschied zwischen Groß- und Kleinschreibung zu dem unteren Fall Zeichen.

+2

Dies wird in anderen Sprachen als Englisch nicht ... – jou

0
!strcasecmp($str1, $str2) 

strcasecmp 0 zurück, nur wenn Strings Gleichheits Fall ignorieren, so! Strcasecmp wahr zurück, wenn sie Gleichen sind ignorieren Fall ist, sonst false

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

+0

Ich bin neugierig, warum dieser Downvoted wurde? –

+0

vielleicht mögen manche Puristen nicht! 0 und bevorzugen! = 0, ich gehöre nicht dazu und bevorzuge kleineren Code: D –

Verwandte Themen