2009-10-30 59 views
43

Estoy tratando de comparar palabras para igualdad, y el caso [superior e inferior] es irrelevante. ¡Sin embargo, PHP no parece estar de acuerdo! ¿Alguna idea sobre cómo forzar a PHP a ignorar el caso de las palabras al compararlas?Ignorar la distinción entre mayúsculas y minúsculas al comparar cadenas en 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 -> 
} 

¿Hay alguna manera de llevar a cabo la sustitución incluso si la carcasa es diferente?

+0

He actualizado mi respuesta a lo que es de esperar responder ¡estabas tratando de preguntar! –

Respuesta

69

Uso str_ireplace para realizar un reemplazo de mayúsculas y minúsculas cuerdas (str_ireplace está disponible desde PHP 5):

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

Para mayúsculas y minúsculas comparar cadenas, utilice strcasecmp:

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

Es bueno saber :) Siempre he estado haciendo strtolower ($ var1) == strtolower ($ var2) para hacer la comparación insensible a mayúsculas o minúsculas – Aishwar

+0

Exactamente cómo lo haría. Para la comparación regular de cadenas, siempre uso su hermano "strcmp" sensible a las mayúsculas y minúsculas, nunca se puede tener mucho cuidado con la escritura suelta de PHP. –

+4

Dependiendo de lo que esté comparando, es posible que desee agregar un ajuste para borrar los espacios en blanco posteriores. if (strcasecmp (trim ($ var1), trim ($ var2)) == 0) {} –

14

La manera más fácil y más ampliamente aceptada de lograr esto es, posiblemente, en minúscula tanto strin gs antes de compararlos, así:

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

Es posible que desee cortar las cuerdas que se comparan, basta con utilizar algo como esto para conseguir esta funcionalidad:

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

Espero que esto ayude!

+1

el método strtolower es muy común, y la sugerencia de ajuste es definitivamente útil, gracias – Andrew

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

strtolower convierte cadena en minúsculas

-2

Siempre acaba de añadir a la diferencia entre ASCII mayúsculas y minúsculas de los caracteres de las minúsculas.

+2

Esto no funcionará en idiomas no ingleses ... – jou

0
!strcasecmp($str1, $str2) 

strcasecmp devuelve 0 si las cadenas son iguales ignorando mayúsculas y minúsculas, por lo! Strcasecmp devuelven true si son iguales ignorando caso, falso en caso contrario

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

+0

Tengo curiosidad de por qué esto fue downvoted? –

+0

tal vez un purista no me gusta! 0 y prefiero! = 0, no soy uno de ellos y prefiero un código más pequeño: D –

Cuestiones relacionadas