테스트 사이트 - 개발 중인 베타 버전입니다

숫자를 문자속성으로 어케 바꾸나요? 채택완료

소수리꼬 8개월 전 조회 2,473

$aaa 의 값이 0123 이구요

$bbb 의 값이 123 입니다.

 

이걸 조건식으로 비교할때.. 변수속성이 숫자라면 같게인식하고 문자속성이라면 다르게 인식되지 않나요?

저는 이걸 문자로 인식해서 다른걸로 인식해야 합니다. 

그래서 

$aaa = strval($aaa );

$bbb = strval($bbb );

요로콤 하면  될줄 알았는데....

 

if($aaa == $bbb) 는 같다고만 나오네요...ㅠㅠㅠ

 

문자로 인식시킬려면 어케 해야 하나요?

 

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
glitter0gim
8개월 전

두 변수의 값을 문자로 강제 변환한 후,

단순 동등 연산자(==) 대신 엄격한 동일 연산자(===)를 사용하면

PHP에서 숫자형으로 인식되는 '자동 형 변환'을 방지할 수 있습니다.

즉, $aaa와 $bbb를 strval()로 문자열로 변환한 뒤 if($aaa === $bbb) 조건문을 사용하면

"0123"과 "123"이 서로 다른 문자열로 비교되어 올바른 결과를 얻을 수 있지 않나? 싶습니다.

 

$aaa = strval($aaa);
$bbb = strval($bbb);

if ($aaa === $bbb) {
    // 두 문자열이 동일할 때의 처리
} else {
    // 두 문자열이 다를 때의 처리
}

★붙임) PHP가 동적이여서, 변수의 데이터 타입을 선언하지 않아도

  상황에 따라 자동 타입 변환('자동 형 변환', '형 요리')됨을 염두하셔야~

. . .

첫째 염두; 비교 연산자로 ==를 사용한 경우

PHP는 두 문자열이 모두 숫자형 문자열일 때 내부적으로 숫자로 변환하여 비교하므로

"0123"과 "123"이 동일(둘 다 123)하다고 판단합니다.

둘째 염두; 만약 $aaa와 $bbb가 숫자 리터럴(예: $aaa = 0123;)로 초기화되었다면,

PHP는 0123을 8진수로 해석하여 실제 저장 값이 83이 됩니다.

이 경우 strval($aaa)는 "83"이 되어 원래 의도한 "0123"과 다르게 변환됩니다.

 

따라서 원하는 결과를 얻으시려면,

비교에 사용되는 값들을 숫자 리터럴이 아닌 문자열 리터럴

 - 예시: $aaa = "0123";  $bbb = "123";

로 선언하고, 반드시 엄격 비교(===)를 사용하여야 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

소수리꼬
8개월 전
어짜피 숫자는 요일을 나타내는 거라서요..
0이 있다면 9로 치환해서 비교 하는 걸로 했어요...
답변 감사합니다.
g
glitter0gim
8개월 전
그렇군요, 한 수 배워갑니다. (●'◡'●)

댓글을 작성하려면 로그인이 필요합니다.

들레아빠
8개월 전

</p>

<p><?php

$aaa = '0123';

$bbb = '123';</p>

<p>$aaa = strval($aaa);

$bbb = strval($bbb);</p>

<p>if ($aaa === $bbb) {

    echo "값이 같습니다.";

} else {

    echo "값이 다릅니다.";

}

?></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소수리꼬
8개월 전
답변 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

s
sinbi Expert
8개월 전

== 연산자로 비교해도 다르게 인식하네요.

</p>

<p>$aaa = 0123;

var_dump($aaa); // int(83)</p>

<p> </p>

<p>$bbb = 123;

var_dump($bbb); // int(123)</p>

<p> </p>

<p>var_dump($aaa == $bbb); // bool(false)</p>

<p>var_dump($aaa === $bbb); // bool(false)</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소수리꼬
8개월 전
답변 감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인