본문 바로가기

PHP/PHP7 예비학교

[PHP] 문자열 비교하기 - ===, strcmp(), strcasecmp(), strncmp()

<?php
function check($a, $b) {
    if ( $a == $b ) {
        echo "SAME";
    } else {
        echo "DIFFERNT";
    }
}

check("PHP7", 7);  // DIFFERNT
check("7PHP", 7)   // SAME
?>

 

첫 번째 비교와 두 번째 비교는 모두 FALSE를 출력해야하지만 두 번째 출력에서 TRUE를 출력합니다.

그 이유는 문자열과 수치를 비교하면 문자열은 자동으로 수치로 형변환이 되기때문입니다.

따라서 조금 더 엄격하게 비교하기 위해서는 '===' 연산자를 이용합니다.

 

=== 연산자 사용


<?php
function check($a, $b) {
    if ( $a === $b ) {
        echo "SAME";
    } else {
        echo "DIFFERNT";
    }
}

check("PHP7", 7);  // DIFFERNT
check("7PHP", 7)   // DIFFERNT
?>

 

strcmp() 사용


인자를 문자열로 바꿔 비교합니다.

 

strcmp ( string $str1 , string $str2 ) : int
비교 반환값
$str1 < $str2 -1
$str1 = $str2 0
$str1 > $str2 1
<?php
function check($a, $b) {
    if ( strcmp($a, $b) == 0 ) {
        echo "SAME";
    } else {
        echo "DIFFERNT";
    }
}

check("PHP7", 7);  // DIFFERNT
check("7PHP", 7)   // DIFFERNT
?>

strcasesmp() - 대소문자 구별 없이 비교


인자를 문자열로 변환하여 대소문자 구분없이 비교합니다.

 

<?php
function check($a, $b) {
    if ( strcasecmp($a, $b) == 0 ) {
        echo "SAME";
    } else {
        echo "DIFFERNT";
    }
}

echo check("A12B", "a12b");	// SAME  
?>

strncmp() - 부분 비교


처음에서 원하는 개수만큼 비교합니다.

 

strncmp ( string $str1 , string $str2 , int $len ) : int
비교 반환값
$str1 < $str2 -1
$str1 == $str2 0
$str1 > $str2 1
<?php
function check($a, $b) {
    if ( strncmp($a, $b) == 0 ) {
        echo "SAME";
    } else {
        echo "DIFFERNT";
    }
}

echo check("ABCD123", "ABCD456");	// SAME

echo strncmp("ABCD123", "ABCD456", 4);  // 0
echo strncmp("ABCD123", "ABCD456", 5);  // -1
echo strncmp("ABCD456", "ABCD123", 5);  // 1
?>
반응형