Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

쟝이의 세상

php <배열과 함수> 본문

수업내용

php <배열과 함수>

zyangee 2024. 9. 2. 17:43

 배열 

: 연관된 데이터를 모아서 관리하기 위해서 사용되는 데이터 타입 -> 자료형을 선언하면 연속된 메모리 공간에 할당

-> 종류: 1차원, 2차원, 3차원 배열

 

1차원 배열

<?php
//배열과 함수

/* 배열을 사용하지 않은 경우
	$kor=85; //int
	$eng=98;
	$math=76;
	$society=72;
	$science=93;
*/

//배열을 사용하는 경우
	$score[0]=85;
	$score[1]=98;
	$score[2]=76;
	$score[3]=72;
	$score[4]=93;
	
	$sum=0;
	for($a=0; $a<=4; $a++){
		$sum+=$score[$a];
	}
	$avg=$sum/5;

	echo "과목 점수: $score[0], $score[1], $score[2], $score[3], $score[4]<br>";
	echo "총점: {$sum}, 평균: {$avg}";
?>

/*
과목 점수: 85, 98, 76, 72, 93
총점: 424, 평균: 84.8
*/
인덱스의 개수는 5개, 각 인덱스의 번호는 0부터 4까지.
--> score[0]  score[1]  score[2]  score[3]  score[4]
배열을 사용할 경우
-- for문을 통해서 자동 연산 기능 사용 가능 => 활용도가 높다.

 

** array( ) 함수를 활용하였을 때

<?php
//array() 함수를 이용하여 학생 20명의 영어성적 입력
	$eng_score=array(87, 76, 98, 87, 87, 93, 79, 85, 88, 63, 74, 84, 93, 89, 63, 99, 81, 70, 80, 95);	//$eng_score[20]과 같음

	$sum=0;
	for($i=0; $i<=19; $i++){
		$plus=$i+1;
		echo "학생 {$plus}의 성적: {$eng_score[$i]}<br>";
		$sum+=$eng_score[$i];
	}
	$avg=$sum/20;
	echo "-------------------------<br>";
	echo "총점: {$sum}, 평균: {$avg}<br>";
	echo "-------------------------<br>";

	
	$length=count($eng_score);
	echo "배열의 길이는 {$length}입니다. <br>";
	print_r($eng_score);
?>

/*
학생 1의 성적: 87
학생 2의 성적: 76
학생 3의 성적: 98
학생 4의 성적: 87
학생 5의 성적: 87
학생 6의 성적: 93
학생 7의 성적: 79
학생 8의 성적: 85
학생 9의 성적: 88
학생 10의 성적: 63
학생 11의 성적: 74
학생 12의 성적: 84
학생 13의 성적: 93
학생 14의 성적: 89
학생 15의 성적: 63
학생 16의 성적: 99
학생 17의 성적: 81
학생 18의 성적: 70
학생 19의 성적: 80
학생 20의 성적: 95
-------------------------
총점: 1671, 평균: 83.55
-------------------------
배열의 길이는 20입니다.
Array ( [0] => 87 [1] => 76 [2] => 98 [3] => 87 [4] => 87 [5] => 93 [6] => 79 [7] => 85 [8] => 88 [9] => 63 [10] => 74 [11] => 84 [12] => 93 [13] => 89 [14] => 63 [15] => 99 [16] => 81 [17] => 70 [18] => 80 [19] => 95 )
*/
array( ) 함수: 기본적인 배열을 생성시키는 함수
--- array( )함수를 사용하여 $eng_score 변수에 배열을 생성시킨다. => $eng_score[20]
count( ) 함수: 주어진 배열의 모든 요소의 개수(array length)를 계산해서(count) 정수로 반환하는 함수
--- count( )함수를 사용하여 해당 배열의 개수를 반환한다. => 반환한 정수 값은 $length 변수에 저장
print_r( ) 함수: 배열을 출력할때 " Array ( ['index번호'] => "값" .... ) " 의 형태로 표현
--- print_r( )함수를 사용하여 value값을 출력

 

** for문을 활용하여 배열의 값을 입력

<?php
/*
1) 배열 $a에 for문을 이용하여 1~10까지의 값을 입력
2) 배열 $b에 for문을 이용하여 10~1까지의 값을 입력
3) 배열 $c에 배열 $a와 배열 $b의 원소를 곱한 결과 입력
4) 배열 $c의 값을 출력하시오.
*/
	echo "배열 a의 값: ";
	for($i=0; $i<10; $i++){
		$num=$i+1;
		$a[$i] = $num;
		echo "$a[$i] ";
	}	

	echo "<br>배열 b의 값: ";
	for($j=0; $j<10; $j++){
		$num2=$j+1;
		$b[$j]=10-$j;
		echo "$b[$j] ";
	}
	
	echo "<br>배열 c의 계산: <br>";
	for($h=0; $h<10; $h++){
		$c[$h]=$a[$h]*$b[$h];
		echo "$a[$h] * $b[$h] = $c[$h]<br>";
	}
	
	echo "<br>배열 c의 값: ";
	for($h=0; $h<10; $h++){
		$c[$h]=$a[$h]*$b[$h];
		echo "$c[$h] ";
	}
?>

/*
배열 a의 값: 1 2 3 4 5 6 7 8 9 10
배열 b의 값: 10 9 8 7 6 5 4 3 2 1
배열 c의 계산:
1 * 10 = 10
2 * 9 = 18
3 * 8 = 24
4 * 7 = 28
5 * 6 = 30
6 * 5 = 30
7 * 4 = 28
8 * 3 = 24
9 * 2 = 18
10 * 1 = 10

배열 c의 값: 10 18 24 28 30 30 28 24 18 10
*/

 

 

2차원 배열

: 배열의 요소로 1차원 배열을 가지는 배열

ex)  학생 5명의 국, 영, 수, 사, 과의 성적
$score[0][0] : 첫번째 학생의 국어성적
$score[1][1] : 두번째 학생의 영어성적
$score[2][2] : 세번째 학생의 수학성적
$score[3][3] : 네번째 학생의 사회성적
$score[4][4] : 다섯번째 학생의 과학성적

-- 앞에 $score[0]은 배열 요소명이다.
-- $score[행][열] 

 

** for문을 활용하여 2차원 배열의 합계 및 평균 구하기

<?php
/*
2차원 배열을 이용하여 세 학생이 받은 다섯 과목 점수의 합계와 평균을 계산하는 프로그램
국, 영, 수, 사, 과
*/
	$score=array(array(88, 98, 96, 77, 63), 
		array(86, 77, 66, 86, 93), 
		array(74, 83, 95, 86, 97));

//입력된 점수와 배열의 인덱스 출력 $score[$i][$j]
	for($i=0; $i<3; $i++){
		for($j=0; $j<5; $j++){
			echo "\$score[$i][$j]=".$score[$i][$j]."<br>";
		}
	}
	echo "<br><br>";

//각 과목별 총점과 평균을 계산하여 출력하시오.
	$subject=array("국어", "영어", "수학", "사회", "과학");
	for($i=0; $i<5; $i++){
		$sum1[$i]=0;
		for($j=0; $j<3; $j++){
			$sum1[$i]+=$score[$j][$i];
		}
		echo "{$subject[$i]}의 합계: $sum1[$i] <br>";
		$avg1=number_format($sum1[$i]/3 ,2);
		echo "{$subject[$i]}의 평균: {$avg1} <br><br>";
	}

//각 학생별 총점과 평균을 계산하여 출력하시오.
	for($i=0; $i<3; $i++){
		$num2=$i+1;
		$sum2[$i]=0;
		for($j=0; $j<5; $j++){
			$sum2[$i]+=$score[$i][$j];
		}
		echo "학생 {$num2}의 합계: $sum2[$i] <br>";
		$avg2=$sum2[$i]/5;
		echo "학생 {$num2}의 평균: {$avg2} <br><br>";
	}
?>

/*
$score[0][0]=88
$score[0][1]=98
$score[0][2]=96
$score[0][3]=77
$score[0][4]=63
$score[1][0]=86
$score[1][1]=77
$score[1][2]=66
$score[1][3]=86
$score[1][4]=93
$score[2][0]=74
$score[2][1]=83
$score[2][2]=95
$score[2][3]=86
$score[2][4]=97


국어의 합계: 248
국어의 평균: 82.67

영어의 합계: 258
영어의 평균: 86.00

수학의 합계: 257
수학의 평균: 85.67

사회의 합계: 249
사회의 평균: 83.00

과학의 합계: 253
과학의 평균: 84.33

학생 1의 합계: 422
학생 1의 평균: 84.4

학생 2의 합계: 408
학생 2의 평균: 81.6

학생 3의 합계: 435
학생 3의 평균: 87
*/

 함수 

: 입력(매개변수) --> 코드실행 --> 출력값(return)

  • 함수의 종류 : 내장함수, 사용자 정의 함수
  • 문법: function 함수명( ) { 코드1; 코드2; }
  • 내장함수:
    < 수학 관련 >
    date() - 현재 날짜 계산
    round() - 반올림
    max() - 최댓값
    rand() - 임의의 난수 생성
    < 문자열 관련 >
    explode() - 문자열 분리
    strlen() - 문자열의 길이 계산
    substr() - 문자열의 일부 추출
    nl2br() - 행바꿈(\n) --> <br>로 변환
    sprintf() - 문자열을 특정 양식에 맞춤

내장함수

<?php
//각종 문자열 관련 함수 사용하기
	$tel="010-2777-3333";
	$num_tel=strlen($tel); //strlen(): 문자열의 길이
	echo "strlen()함수 사용: {$num_tel}<br>";
	
	$tel1=substr($tel, 0, 3); //$tel변수에서 인덱스 0번부터 3글자
	$tel2=substr($tel, 4, 4); //$tel변수에서 인덱스 4번부터 4글자 -> 2777
	$tel3=substr($tel, 9, 4); //$tel변수에서 인덱스 9번부터 4글자 -> 3333
	echo "substr()함수 사용: {$tel1} {$tel2} {$tel3}<br>";

	$phone=explode("-",$tel); //배열 값으로 리턴
	echo "explode()함수 사용: $phone[0] $phone[1] $phone[2]";
?>

/*
strlen()함수 사용: 13
substr()함수 사용: 010 2777 3333
explode()함수 사용: 010 2777 3333
*/

 

 

사용자 정의 함수

-> 리턴 값이 있는 함수와 리턴 값이 없는 함수 처리법

<?php
//두 수를 더하여 리턴하는 함수
	function plus($a, $b) {
		$c=$a+$b;
		echo "{$c}";
	}
	
	function plus2($a, $b) {
		$c=$a+$b;
		return $c;
	}
	plus(15, 25);
	echo "<br>";
    
	$rs=plus2(16, 26);
	echo "$rs<br>";
	
	$rs2=plus2(3500, 1500);
	echo "$rs2";
?>

/*
40
42
5000
*/
plus 함수의 $a와 $b는 매개변수(=parameter)
plus2 함수의 $a와 $b도 매개변수(=parameter)
두 함수의 차이점
- plus() 함수는 return 값이 아닌 echo로 출력을 해주는 함수
- plus2() 함수는 return 값으로 반환해주는 함수
return된 값은 일시적으로 저장되고 사라지므로 $rs 변수에 받아서 출력해 줌
-> 변수에 저장만 하고 echo로 출력해주지 않으면 값은 출력되지 않음

 

** 세 수의 연산

<?php
//세 수를 +, - 연산
	function bbb($a, $b, $c) {
		$rs=$a+$b-$c;
		return $rs;
	}
	$first=500;
	$second=200;
	$third=300;
	$result=bbb($first, $second, $third);
	echo "세 수의 연산: {$result}";
?>

/*
세 수의 연산: 400
*/
bbb함수의 매개변수 $a, $b, $c -> 매개변수 3개
$result 변수에 받는 bbb함수의 인자 값 $first, $second, $third -> 인자 값 3개
초기값이 세팅되어있을 때를 제외하고 매개변수의 개수와 인자 값의 개수가 일치해야 한다.

 

** 입력받은 값의 사이값 더하기

<?php
//hap($a, $b) 함수는 $a부터 $b까지의 합을 구하는 프로그램
	function hap($a, $b) {
		$sum=0;
		for($i=$a; $i<=$b; $i++){
			$sum+=$a;
			echo "$a ";
			$a++;
		}
		return $sum;
	}
	$result=hap(5,10);
	echo "<br>$result";
?>

/*
5 6 7 8 9 10
45
*/