2009-10-30 30 views
43

Tôi đang cố gắng so sánh các từ để bình đẳng và trường hợp [trên và dưới] không liên quan. Tuy nhiên PHP dường như không đồng ý! Bất kỳ ý tưởng nào về cách buộc PHP bỏ qua trường hợp của các từ trong khi so sánh chúng?Độ nhạy trường hợp bỏ qua khi so sánh các chuỗi trong 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 -> 
} 

Có cách nào để thực hiện thay thế ngay cả khi trường hợp khác?

+0

Tôi đã cập nhật câu trả lời của tôi để hy vọng trả lời những gì bạn đang cố hỏi! –

Trả lời

69

Sử dụng str_ireplace để thực hiện một sự thay thế case-insensitive string (str_ireplace có sẵn từ PHP 5):

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

Case-insensitively so sánh chuỗi, sử dụng strcasecmp:

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

Điều cần biết :) Tôi luôn làm strtolower ($ var1) == strtolower ($ var2) để so sánh phân biệt chữ hoa chữ thường – Aishwar

+0

Chính xác là tôi sẽ làm như thế nào. Đối với việc so sánh chuỗi thông thường, tôi luôn luôn sử dụng anh em nhạy cảm 'strcmp' của nó, bạn không bao giờ có thể quá cẩn thận với việc đánh máy lỏng lẻo của PHP. –

+4

Tùy thuộc vào những gì bạn đang so sánh bạn có thể muốn thêm một trim để xóa khoảng trống cuối. nếu (strcasecmp (cắt ($ var1), cắt ($ var2)) == 0) {} –

14

Cách dễ nhất và được hỗ trợ rộng rãi nhất để đạt được điều này có thể là chữ thường cả hai strin gs trước khi so sánh chúng, như vậy:

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

Bạn có thể muốn để cắt chuỗi được so sánh, chỉ cần sử dụng một cái gì đó như thế này để đạt được chức năng này:

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

Hope this helps!

+1

phương pháp strtolower là rất phổ biến, và đề nghị trim là chắc chắn hữu ích, nhờ – Andrew

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

strtolower chuyển xâu thành chữ thường

-2

tôi luôn luôn chỉ cần thêm sự khác biệt ascii giữa chữ hoa và chữ đến trường hợp chars thấp hơn.

+2

Điều này sẽ không làm việc trong các ngôn ngữ không phải tiếng Anh ... – jou

0
!strcasecmp($str1, $str2) 

strcasecmp trả về 0 chỉ khi chuỗi còn bình đẳng phớt lờ trường hợp, như vậy! Strcasecmp trả về true nếu họ còn bình đẳng phớt lờ trường hợp, sai khác

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

+0

Tôi tò mò là tại sao điều này đã được downvoted? –

+0

có thể một số purist không thích! 0 và thích! = 0, tôi không phải là một trong số họ và thích mã nhỏ hơn: D –

Các vấn đề liên quan