그럴 수도 있지

[PHP] strpos() Find a string (문자열 찾기) 본문

php

[PHP] strpos() Find a string (문자열 찾기)

디벅 2024. 3. 4. 20:32
반응형

Syntax

strpos(string $haystack, string $needle, int $offset = 0): int | false

 

자바스크립트의 indexOf랑 비슷한 함수로 문자열이 있는지 판단하거나 문자열을 찾아 자를 때 사용한다.

 

Parameters

haystack : 탐색할 문자열

needle : 찾을 문자열(혹은 문자)

offset : 선택값이며, offset을 지정하면 haystack에서 해당 위치부터 문자열을 찾는다. 

 

Return Values

위치를 정수로 반환하며, 문자열은 1부터가 아닌 0부터 시작한다. 찾는 문자열이 없을 경우 false 반환한다.

 

 

Example 1

$msg = "Hello! welcome to my blog.";
echo "welcome의 위치는 ".strpos($msg, "welcome")."입니다.";

 

Result

welcome의 위치는 7입니다.

 

 

Example 2

$msg = "Hello! welcome to my blog.";
echo "e 위치는 ".strpos($msg, "e", 5)."입니다.";

 

 

Result

e 위치는 8입니다.

 

offset 설정할 경우 지정값 이후부터 찾아야 하므로, e 위치는 1 아닌 8 반환한다.

 

 

Example 3

$msg = "Hello! welcome to my blog.";

if(strpos($msg, "blog")){
  echo "blog 단어가 있음";
} else {
  echo "blog 단어가 없음";
}

if(strpos($msg, "Debuck")){
  echo "Debuck 단어가 있음";
} else {
  echo "Debuck 단어가 없음";
}

if(strpos($msg, "Hello")){
  echo "Hello 단어가 있음";
} else {
  echo "Hello 단어가 없음";
}

 

Result

blog 단어가 있음
Debuck 단어가 없음
Hello 단어가 없음

 

 

여기서 이상한 점을 발견할 수 있는데 Hello 단어가 있는데도 불구하고 없다고 판단을 한다. 이유는 Hello의 위치가 0이므로 0을 반환하는데 0 = FALSE라는 점 때문에 IF문에는 FALSE로 판단해버리는 것이다. 

 

그렇기 때문에 IF문을 사용할 경우에는 아래와 같이 IF(strpos(문자열, 찾는 문자열) !== FALSE) 판단해야 한다.

 

Example 4

if(strpos($msg, "Hello")!== FALSE){
  echo "Hello 단어가 있음";
} else {
  echo "Hello 단어가 없음";
}

 

Result

Hello 단어가 있음
반응형

'php' 카테고리의 다른 글

[PHP] phpexcel 날짜 오류 (+1일 되는 내용)  (0) 2022.07.05