Игнорировать чувствительность к регистру при сравнении строк в PHP
Я пытаюсь сравнить слова для равенства, а случай [верхний и нижний] не имеет значения.
Однако PHP, похоже, не согласен! Любые идеи относительно того, как заставить 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 ->
}
Есть ли способ выполнить замену, даже если дело отличается?
Ответы
Ответ 1
Используйте str_ireplace
для выполнения замены строки без учета регистра (str_ireplace
доступен с PHP 5):
$story_body = str_ireplace($arr_query_words[$j],
'<span style=" background-color:yellow; ">'. $arr_query_words[$j]. '</span>',
$story_body);
Для случайного сравнения строк используйте strcasecmp
:
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>
Ответ 2
Самый простой и наиболее широко поддерживаемый способ достижения этого - возможно, строчные буквы обеих строк перед их сравнением, например так:
if(strtolower($var1) == strtolower($var2)) {
// Equals, case ignored
}
Возможно, вы захотите обрезать сравниваемые строки, просто используйте что-то подобное для достижения этой функциональности:
if(strtolower(trim($var1)) == strtolower(trim($var2))) {
// Equals, case ignored and values trimmed
}
Ответ 3
strcasecmp
Ответ 4
$var1 = "THIS is A teST";
$var2 = "this is a tesT";
if (strtolower($var1) === strtolower($var2) ) {
echo "var1 and var2 are same";
}
strtolower
преобразует строку в нижний регистр
Ответ 5
if(!strcasecmp($str1, $str2)) ... //they are equals ignoring case
strcasecmp возвращает 0, только если строки равны, игнорируя регистр, поэтому! strcasecmp возвращает true, если они равны, игнорируя регистр, в противном случае - false
http://php.net/manual/en/function.strcasecmp.php
Ответ 6
Я всегда добавляю разницу ascii между верхним и нижним регистром в символы нижнего регистра.