int strpos ( string
$haystack
, mixed $needle
[, int $offset
= 0 ] )strpos, stripos, strrpos 등 string에서 원하는 needle의 위치를 발견하는 함수는 꽤 많이 사용했었는데, 이게 정확히 그 needle이 존재하는가 하는 부분을 명확하게 해야 하는 경우가 있다. 반환은 int 형태로 되고 없을 경우 FALSE를 반환하는데, 이걸 개념적으로 명확하게 로직을 짜야 잘 작동하는 것 같다. 물론 부분매치는 지원하지 않는데, 정확하게 작동하게 하려면 다음과 같다.
예를 들어 $text라는 string에서 "strangers" 라는 needle을 찾아서 있을 경우 뭔가 하고 싶다면 다음과 같이 할 수 있는데, 이건 정확히 작동하지 않는 경우가 생긴다.
if (strpos($text, "strangers")) {
... (process)
} // sometimes does not work properly
사실 int 아니면 FALSE를 반환하므로, FALSE만 아니라면 그냥 써도 될 것 같은데 이게 잘 안되는 경우를 봤다. 그렇다고 다음처럼 해도 때에 따라 잘 안된다.
if (strpos($text, "strangers") >= 0) {
... (작업)
} // sometimes does not work properly
아직 이유는 잘 모르겠다. 결국 논리적으로 명확하게 적어야만 원하는 대로 돌아가는데, 다음과 같다.
if (strpos($text, "strangers") !== FALSE) {
.... (작업)
} // works well
No comments:
Post a Comment