<?PHP
//
// PHP 문자열 함수
//
● 문자열 합치기
$a = "aaa";
$b = "bbb";
$c = $a . "/" . $b;
echo($c);
● 문자열 다듬기
- trim(), ltrim(), chop()에서 지우는 공백은 스페이스, '\n'(줄바꿈), '\t'(가로 탭), '\v',
○ trim();
- 문자열의 처음과 끝에 있는 공백을 지운다.
○ ltrim();
- 문자열의 처음에 있는 공백을 지운다.
○ chop();
- 문자열의 끝에 있는 공백을 지운다.
● 문자열 정돈
○ nl2br();
- 문자열중 줄바꿈문자(\n)를 XHTML에서의 줄바꾸기인 <br/>태그로 바꾸어 준다.(4.0.5 이전의 HTML에서는 <br>태그)
● 문자열의 대소문자 관련 함수
○ strtoupper();
- 모든 알파벳을 대문자로
○ strtolower();
- 모든 알파벳을 소문자로
○ ucfirst();
- 문장의 처음이 알파벳이면 그것만 대문자로
○ ucword();
- 각 단어의 첫 알파벳을 대문자로
● 문자열 나누고 합치기
○ explode();
- 지정 문자를 기준으로 문자열의 전, 후를 나누어 배열로 저장한다.
ex) $email = 'email@email.com'; $email_array = explode('@', $email);
$email_array[0] → 'email'; $email_array[1] → 'email.com';
○ implode();, join();
- 지정 문자를 기준으로 배열을 전, 후에 배치하여 문자열을 합친다.
ex) $new_email = implode('@', email_array); $new_email → 'email@email.com';
○ strtok();
-
○ substr();
- 문자열 중 특정 시작부분과 끝부분 사이의 문자열을 추출하는데 사용한다.
ex) $test = 'PHP Webprogramming';
$test1 = substr($test, 1);
$test2 = substr($test, -1);
$test3 = substr($test, 5, 8);
$test4 = substr($test, 4, -2);
$test1 → 'HP Webprogramming'(앞에서 1번 부터)
$test2 → 'g'(뒤에서 1번 부터)
$test3 → 'ebprogra'(앞에서 5번부터 8개)
$test4 → 'Webprogrammi'(앞에서 4번부터 뒤에서 2번까지)
● 문자열 비교하기
○ strcmp();
- C언어에서의 함수와 같다. 앞의 문자열을 기준으로 같으면 0을, 우선순위가 높으면 -1을, 반대의 경우에는 1을 리턴한다.
- 단, 대문자와 소문자의 경우 소문자가 우선순위가 더 높다.(ASCII코드의 대소관계를 생각하면 쉽다.)
○ strcasecmp();
- C언어에서의 stricmp()와 같다. 두 문자열을 비교하는 것은 strcmp()와 같지만 대소문자를 구분하지 않는다.
○ strnatcmp(); & strnatcasecmp();
- 이 두 함수는 문자열을 좀더 자연스러운 기준에서 비교한다.(strnatcmp("12","2")의 결과는 1이다.)
- 이 두 함수의 차이는 대소문자의 구분여부이다.(이 두 함수의 차이는 case의 유무여부이다.)
● 문자열의 길이 확인하기
○ strlen();
- C언어에서의 함수와 같다. 문자열의 길이를 정수값으로 리턴해준다.
● 문자열 안에서 문자열 찾기
○ strstr();
- 문자열 안에서 특정 문자열과 일치하는 부분이 있는지 찾아내는데 쓰이는 함수이다.
- 일치하는 문자열이 있을 때는 해당 문자열이나 문자를 포함하여 이후 문자열을 리턴한다.
- 일치하는 문자열이 없을 시에는 false를 리턴한다.
ex) $str='Lion sleep to night'; $res = strstr($str, 'sleep');
$res → 'sleep to night'
○ stristr();
- strstr()과 같으나 대소문자를 구분하지 않는다.(ABC, Abc, aBC모두 같은 것으로 취급한다.)
○ strchr();
- strstr()과 같으나 문자열대신 문자를 찾는다.
○ strrch();
- strchr()과 같으나 뒤에서 부터 일치하는 문자를 찾기 때문에 마지막으로 나타난 문자부터 문자열을 출력한다.
● 문자열의 위치 찾아내기
○ strpos();
- 문자열 내에서 일치하는 문자열이나 문자를 찾아 문자열 대신 해당 위치를 숫자로 알려준다.
ex) $test = 'Ice cream'; $res1 = strpos($test, 'a'); $res2 = strpos($test, 'e');
$res1 → 7(0부터 시작한다.) $res2 = 2(일치하는 문자나 문자열이 많을 경우 가장 앞의 것을 기준으로 한다.)
ex) $test = 'Ice cream'; $res = strpos($test, 'e', 4);
$res = 6(앞에서부터 4번째에 있는 c부터 해당문자열의 위치를 찾는다.)
※ 이 예에서는 문자만 사용하였지만 문자열도 얼마든지 사용할 수 있다.
○ strrpos();
- strpos와 비슷하나 찾는 문자가 가장 마지막에 보이는 곳의 위치를 리턴한다.
※ strrpos()는 strpos()와 달리 문자만 사용할 수 있다.
※ 두 함수 모두 만약 문자열에 needle(찾는 문자나 문자열)이 없으면 false를 리턴하는데 PHP에서는 false를 0과 같다고 보기 때문에 위치 0을 리턴한것인지 false를 리턴한 것인지 구분할 수가 없다. 이 문제는 === 연산자를 사용하여 해결할 수 있다.
ex) $res = strpos('Hello world', 'H'); //이 경우에는 가장 앞에 'H'가 있기 때문에 0을 리턴하지만 PHP는 false와 구분하지 못한다.
if($res === false)
echo 'Not found';
else
echo 'Found at position 0';
● 문자열 대체하기
○ str_replace();
- 문자열에서 문자열를 찾아 대체문자열로 바꾸어 리턴한다.
ex) $test = 'Change'; $res = str_replace('g', 'c', $test);
$res → 'Chance'
○ substr_replace();
- 특정 위치의 문자열을 대체문자열로 바꾸어 리턴한다.
ex) $test = 'Vitamin A'; $res = substr_replace($test, 'C', -1);
$res → 'vitamin C'
// 같은문자 반복출력
echo str_repeat(' ', 5);
$test = "phpcoder ";
echo "문장원본은 " . $test;
echo "<br>";
echo "<br>";
// 문자를 배열로 인식
echo "1번째문자는" . $test[0];
echo "<br>";
echo "6번째문자는" . $test[5];
echo "<br>";
// 길이구하기
echo "길이는" . strlen($test);
echo "<br>";
// strstr 스트링검색 (검색된 문자 이후를 모두반환)
echo "pc검색 " . strstr($test, "pc");
echo "<br>";
echo '--<br>';
echo $belong.'/<br>'; //SIO
echo '--<br>';
echo (strstr($belong, 'S')).'/<br>'; //SIO
echo (strstr($belong, 'S')!='').'/<br>';//1
echo (!strstr($belong, 'S')).'/<br>'; //null
echo (strstr($belong, 'S')=='').'/<br>';//null
echo '--<br>';
echo (strstr($belong, 'I')).'/<br>'; //IO
echo (strstr($belong, 'I')!='').'/<br>';//1
echo (!strstr($belong, 'I')).'/<br>'; //null
echo (strstr($belong, 'I')=='').'/<br>';//null
echo '--<br>';
echo (strstr($belong, 'A')).'/<br>'; //null
echo (strstr($belong, 'A')!='').'/<br>';//null
echo (!strstr($belong, 'A')).'/<br>'; //1
echo (strstr($belong, 'A')=='').'/<br>';//1
echo '--<br>';
// strpos 스트링검색 (검색된 문자의 위치반환, 0부터시작)
echo "pc위치 " . strpos($test, "pc");
echo "<br>";
echo '--<br>';
echo $belong.'/<br>'; //SIO
echo '--<br>';
echo (strpos($belong, 'S')).'/<br>'; //0
echo (strpos($belong, 'S')!='').'/<br>';//null
echo (strpos($belong, 'S')=='').'/<br>';//1
echo '--<br>';
echo (strpos($belong, 'I')).'/<br>'; //1
echo (strpos($belong, 'I')!='').'/<br>';//1
echo (strpos($belong, 'I')=='').'/<br>';//null
echo '--<br>';
echo (strpos($belong, 'A')).'/<br>'; //null
echo (strpos($belong, 'A')!='').'/<br>';//null
echo (strpos($belong, 'A')=='').'/<br>';//1
echo '--<br>';
// substr 스트링 추출 <-- mid test='1234test' 0부터시작,
echo "3이후 2개 " . substr($test, 3, 2); // 4t 출력
echo "<br>";
// 숫자앞에 0붙이기
echo sprintf('%02d', 3); //숫자앞에 0이 붙는다.
// 형변환
echo (int) "2abcdefg"; // 2
echo (int) "나는 31살입니다."; // 0
echo (float) "3.141592=4"; // 3.141592
echo (float) "abcdefg5.234"; // 0
echo (float) "1.30E-2"; // 0.013 ←지수표기를 위한 E는 예외
echo (float) "0.0"; // 0
//=========================================
// 문자열 관련 함수모음
//=========================================
//
// 원하는 길이로 숫자만들기 = 숫자앞에 0붙이기
//
function set_number($str,$len)
{
$str = "0000000000".$str;
$l = strlen($str);
$len = ($len>$l) ? $l : $len;
return substr($str, $l-$len, $len);
}
//-------------------------------------------------------
// 문자열 끊기 (이상의 길이일때는 .. 로 표시)
//-------------------------------------------------------
// 사용예) echo cut_str('abcdefg',3); -> abc.. 출력됨
function cut_str($str,$maxlen, $suffix = "..") {
if($maxlen<=0) return $str;
if(ereg("\[re\]",$str)) $len=$len+4;
if($maxlen >= strlen($str)) return $str;
$klen = $maxlen - 1;
while(ord($str[$klen]) & 0x80) $klen--;
return substr($str, 0, $maxlen - (($maxlen + $klen + 1) % 2)).$suffix;
}
// 문자열 오른쪽에서 잘라오기
// echo right("abc",2); //오른쪽에서 2개 bc출력됨
// $an1 = right('000'.rand(0,9999),4); // 4자리의 난수발생
function right($dat, $len){
$l = strlen($dat);
$len = ($len>$l) ? $l : $len;
return substr($dat, $l-$len, $len);
}
// 문자열 왼쪽에서 잘라오기
function left($dat, $len){
return substr($dat, 0, $len);
}
// str_replace 스트링 교체
echo "문자교체 " . str_replace("php", "PHP_", $test);
echo "<br>";
// strtoupper, strtolower 대소문자 변경
echo "대문자로표시 " . strtoupper($test);
echo "<br>";
// trim , ltrim, rtrim공백제거
echo "공백제거전 " . $test . "/";
echo "<br>";
echo "공백제거후 " . trim($test) . "/";
echo "<br>";
// strip_tags(원문, 남겨놓을테그) 테그제거
$test = "<i>--<b> 굵은문장 </b>--</i><br>";
echo "테그제거전 " . $test;
echo "테그제거후 " . strip_tags($test, "<br>");
// strtok 스트링 추출 <-- split
$test = "http://test.com/search?h1=en&ie=UTF-8&q=google+Search";
$delims = "?&";
$word = strtok($test, $delims);
while (is_string($word)){
if ($word) {
echo $word . "<br>";
}
$word = strtok($delims);
}
// explode() 스트링 배열만들기 <-- split
$test = "2009-03-16";
$date_array = explode("-", $test);
//$date_array[0] == "2009"
//$date_array[1] == "03"
//$date_array[2] == "16"
echo $date_array[0]."-".$date_array[1]."-".$date_array[2];
echo "<br>";
// wordwarp 문장에 일정한 길이마다 <BR> 넣어주기
// echo wordwrap($test); //만 쓰면 75문자마다 행바꿈 삽입
// echo wordwrap($test, 5, "<br>\n"); // 한행의 최대문자는 5자, 줄바꿈시 <br>\n 삽입
// nl2br 문장에서 \n 을 <BR>로 교체
$test = "11111\n22222\n33333\n";
echo nl2br($test);
echo "<br>";
// etc..
echo "스트링관련: <a href='http://www.php.net/manual/kr/ref.strings.php'>http://www.php.net/manual/kr/ref.strings.php</a> <br>";
echo "날짜와시간: <a href='http://www.php.net/manual/kr/ref.datetime.php'>http://www.php.net/manual/kr/ref.datetime.php</a> <br>";
// 우측에서 특정문자를 제거한다.
function r_trim($dat, $cut){
for($i=strlen($dat); $i>0; $i--) {
if(substr($dat,$i-1,1) != $cut) return substr($dat,0,$i);
}
}
// 좌측에서 특정문자를 제거한다.
function l_trim($dat, $cut){
$L = strlen($dat);
for($i=0; $i<$L; $i++) {
if(substr($dat,$i,1) != $cut) return substr($dat,$i);
}
}
//
// 소트
//
$arrays=array( "sample1.php", "sample11.php", "sample21.php",
"sample2.php", "sample12.php", "sample22.php",
"sample3.php", "sample13.php", "sample23.php");
natsort($arrays);
foreach ($arrays as $v){
print $v."<br>"; //값 출력
}
function swap($a,$b) { $temp = $a; $a = $b; $b = $temp; }
//echo choose("aa","aa|bb|cc|dd|ee");
echo choose("aa","asdf , aa ,AA,aa ,aa",",");
// $target에서 $find문자가 몇번째 있는지 반환함
// 0이상=찾음 , -1=못찾음 , 공백제거할것
function choose($find, $target, $cut_string="|"){
$arr_choose = explode($cut_string, $target);
$L = count($arr_choose);
if($L==1){
return ($arr_choose[0]==$find) ? 0 : -1;
}else{
for($i=0; $i<$L; $i++){
if($arr_choose[$i]==$find)
return $i;
}
return -1;
}
}
/* -------------------------------------------------
대상문자열에서 찾는문자가 몇번째에 있는지 반환함
결과
0이상=찾음 , -1=못찾음
참고
구분자는 콤마(,), 공백제거할것, 대소문자구분안함
사용예
echo choose("aa","asdf , aa ,AA,aa ,aa",",");
------------------------------------------------- */
function choose($find, $target, $cut_string=","){
$find=strtoupper($find);
$arr_choose = explode($cut_string, $target);
$L = count($arr_choose);
for($i=0; $i<$L; $i++){
if(strtoupper($arr_choose[$i])==$find)
return $i;
}
return -1;
}
//-----
// 배열에서 val 번째 있는 문자반환 - 0 부터시작함
//
//예) $arr=array("가가","나나","다다","라라","마마");
// echo get_array_str($arr,1); // 나나
//-----
function get_array_str($arr, $val)
{
if($arr) return $arr[$val];
}
// 배열에서 $str 값과 같은값의 위치는 - 0부터시작, 없으면 -1
function get_array_val($arr, $str)
{
if($arr){
for($i=0; $i<count($arr); $i++)
{
$arr[$i] = trim($arr[$i]);
if($arr[$i] == $str)
{
return $i;
}
}
}
return -1;
}
?>