자주 사용 하는 함수 인데, 매번 생각이 안나서 검색을 해야 한다. 여기에 정리 하다 보면 기억에 남으리라 믿는다. 일단, PHP에서 문자열에서 특정 문자가 포함 되었는지 찾아 주는 함수다.
int eregi ( string $pattern , string $string [, array &$regs ] );예를 들어보자.
echo eregi( 'A', "ABCDEFG");간단 하다. 파라미터 2개 중에 앞에 찾을려는 문자, 뒤에는 문자열이다. 세번째 파라미터는 패턴 뭐 어쩌고... 모르겠다. 궁금한 사람은 http://php.net/manual/en/function.eregi.php 여기서 보면 된다.
반환값은 몇 번째에 있는가 그런거 상관 없이 있으면 1, 없으면 0을 반환 한다. 세번째 파라미터가 들어가면 반환값이 바뀌는것 같다만 거기까진 알지 말자. PHP닷넷에서 보다보니, 이 함수는 PHP 5.3.0. 버전 이후로는 사용하지 말란다.
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] );위에 녀석과 파라미터가 반대다. 앞에 문자열이 들어가고 뒤에 찾을 문자가 들어간다. eregi()와 다른점은 이녀석은 찾고자 하는 문자의 위치를 반환 해준다.
예를 들어보자.
echo strpos( "ABCDEFG" , "A" );이러면 0이 나온다. 첫번째니까. "B"를 찾으면 1이 나오고, G를 찾으면 6이 나오겠지.
그럼 이러면 어떨까?
echo strpos( "ABCDEFG" , "H" );찾고자 하는 문자가 문자열에 없다. 그럼 이녀석은 int 숫자값이 아닌 boolean 값을 뱉는다.
찾았을때는 위치 숫자값을, 못찾으면 boolean(false)를 뱉는다. http://php.net/manual/en/function.strpos.php
참고해보면 이 함수를 사용해서 조건문을 돌릴때면 비교 연산자를 === 또는 !==를 쓰란다.
'=' 이게 3개가 붙어있는거 솔직히 처음 봤다.
$a === $b $a와 $b가 같고, 같은 자료형이면 TRUE. (PHP 4에서 추가)
$a !== $b $a가 $b와 같지 않거나, 같은 자료형이 아니면 TRUE. (PHP 4에서 추가) http://php.net/manual/kr/language.operators.comparison.php 읽었는데 무슨 말인지 모르겠다.
이해 안되는게 분해서 저 권장사항이 쓸모없음을 증명하고 싶었다.
if( strpos( "ABCDEFG" , "H" ) >=0 ) echo "포함되네";어짜피 찾으면 0부터 시작되는 숫자값 줄꺼고, 못찾으면 false니까 뭐 이러면 되겠네!
라고 생각했는데 멍청한 생각이다.
if( -1 ) echo "헐퀴-1"; if( 0 ) echo "헐퀴0"; if( 1 ) echo "헐퀴1"; if( true ) echo "헐퀴true"; if( false ) echo "헐퀴false";틈이 나면 이렇게 한번 찍어보라. 0과 false는 헐퀴를 볼 수 없다. 0을 false처럼 써지니까.
while(1) 이런거 많이 해봤잖아.
strpos()는 찾지 못하면 false 을 뱉는다. 찾고자 하는게 가장 첫번째에 있어도 0을 뱉는다.
위의 예제를 보면 결국 false >= 0 이 되는거고 참이다. 항상 참이다.
false는 boolean형이고 0은 int형이지만, if는 신경 안쓴다. 그래서 !== 이나 ===을 쓴다.
권장사항은 이렇다.
if( strpos( "ABCDEFG" , "H" ) !== false ) echo "헤헿 포함!";이러면 false !== false 가 되고, 자료형도 달라야되고, 값도 달라야되는데 둘다 같아서 거짓!.
찾을경우 0~n !== false 가 되고, 자로형도 다르고 값도 다르므로 참이 되는 것.
어? 쓰고있는데 햇갈린다.
댓글 없음 :
댓글 쓰기