2009-10-30 4 views
43

J'essaie de comparer les mots pour l'égalité, et le cas [supérieur et inférieur] est sans importance. Cependant PHP ne semble pas d'accord! Des idées sur la façon de forcer PHP à ignorer le cas des mots en les comparant?Ignorer la sensibilité à la casse lors de la comparaison de chaînes dans 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 -> 
} 

Existe-t-il un moyen d'effectuer le remplacement même si le boîtier est différent?

+0

J'ai mis à jour ma réponse pour répondre à ce que nous espérons vous essayiez de demander! –

Répondre

69

Utilisez str_ireplace pour effectuer un remplacement de chaîne insensible à la casse (str_ireplace est disponible à partir de PHP 5):

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

Pour insensible à la casse comparer des chaînes, utilisez strcasecmp:

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

Bon à savoir :) J'ai toujours fait strtolower ($ var1) == strtolower ($ var2) pour faire la comparaison insensible à la casse – Aishwar

+0

Exactement comment je le ferais. Pour la comparaison régulière de chaîne, j'utilise toujours son frère 'strcmp' sensible à la casse, vous ne pouvez jamais être trop prudent avec la frappe lâche de PHP. –

+4

En fonction de ce que vous comparez, vous pouvez ajouter un découpage pour effacer les espaces de fin. si (strcasecmp (trim ($ var1), trim ($ var2)) == 0) {} –

14

La façon la plus simple et la plus largement prise en charge consiste à minuscule gs avant de les comparer, comme ceci:

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

Vous pouvez couper les chaînes comparées, il suffit d'utiliser quelque chose comme ceci pour obtenir cette fonctionnalité:

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

Hope this helps!

+1

la méthode strtolower est très commun, et la suggestion d'assiette est certainement utile, merci – Andrew

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

strtolower convertit la chaîne en minuscules

-2

je toujours juste ajouter la différence ascii entre majuscules et minuscules aux caractères des minuscules.

+2

Cela ne fonctionnera pas dans les langues non-anglais ... – jou

0
!strcasecmp($str1, $str2) 

strcasecmp retourne 0 seulement si les chaînes sont égaux en ignorant le cas, donc! Strcasecmp return true s'ils sont égaux en ignorant le cas, sinon false

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

+0

Je suis curieux de savoir pourquoi cela a été downvoted? –

+0

peut-être certains puristes n'aiment pas! 0 et préfèrent! = 0, je ne suis pas l'un d'entre eux et préfèrent plus petit code: D –

Questions connexes