<?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('&nbsp;', 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;
}
?>

'백엔드 개발 놀이터 > PHP' 카테고리의 다른 글

PHP - 분기 , 반복  (0) 2020.05.17
PHP - 날짜관련 함수모음  (0) 2020.05.17
PHP - 수학함수  (0) 2020.05.17
PHP - type juggling , 0과null  (0) 2020.05.17
2018년 PHP 프레임워크 순위 베스트 10  (0) 2020.03.05

+ Recent posts