배열
배열을 정의하는 방법은 두 가지가 있다.
//(1) ~ (3) 모두 같은 의미임
//(1)
$score[0] = 1;
$score[1] = 4;
$score[2] = 33;
//(2)
$score=[1,4,33];
//(3)
$score = array(1,4,33);
<?php
$class = array("egoing","k8805");
echo "$class[0]<br>";
echo $class[1];
?>
<?php
$class = ["egoing", "k8805"];
echo "$class[0] <br>";
echo "$class[1]";
?>
인덱스를 통해 배열에 접근한다. 0부터 시작
배열을 이용해서 성적의 합계와 평균 구하기
?php
$score[0]=90;
$score[1]=80;
$score[2]=85;
$score[3]=95;
$score[4]=93;
$sum = 0;
for($i = 0; $i<5;$i++){
$sum +=$score[$i];
}
$avg = $sum / 5;
echo "과목 합: $sum<br>";
echo "과목 평균: $avg";
?>
array() 함수 이용해서 성적의 합계와 평균 구하기
<?php
$score = array(90,80,85,95,93);
$sum = 0;
for($i = 0; $i<5;$i++){
$sum +=$score[$i];
}
$avg = $sum / 5;
echo "과목 합: $sum<br>";
echo "과목 평균: $avg";
?>
같은 결과 출력된다.
배열 이용한 구구단 표 만들기
a라는 배열과 b라는 배열에 for문을 돌려서 값을 저장한다.
-> 그 값을 토대로 구구단을 만든다
$a[0]으로 2단 만들고, $a[3]으로 5단 만든다.
<?php
//단수 저장
for($i = 0; $i <=7; $i++){
$a[$i] = $i+2;
echo "$a[$i] ";
}
echo "<br>";
//1~9 저장
for($j = 0; $j <=8; $j++){
$b[$j] = $j+1;
echo "$b[$j] ";
}
echo "<br>----------<br>";
//2단 구구단
for($i = 0;$i<9; $i++){
$r = $a[0] * $b[$i];
echo "$a[0] x $b[$i] = $r<br>";
}
echo "----------<br>";
//6단 구구단
for($i = 0;$i<9; $i++){
$r = $a[4] * $b[$i];
echo "$a[4] x $b[$i] = $r<br>";
}
?>
배열과 버블 정렬
버블 정렬은 인접한 2개의 원소를 비교하면서 값을 정렬하는 방식
오름차순으로 버블 정렬하기
<?php
$num = array(15,13, 9, 7, 6, 12, 19, 30, 28, 26);
$count= 10;
echo "정렬 전 ";
for($a = 0; $a<10;$a++){
echo $num[$a]." ";
}
echo "<br>";
for($i = $count-2; $i >=0; $i--){
for($j=0; $j <=$i; $j++){
if($num[$j]>$num[$j+1]){
$temp = $num[$j];
$num[$j] = $num[$j+1];
$num[$j+1] = $temp;
}
}
}
echo "버블 정렬(오름차순) 후 ";
for($a = 0; $a<10;$a++){
echo $num[$a]." ";
}
?>
여기서 $i는 현재 정렬되지 않은 부분의 마지막 인덱스를 나타냅니다. 바깥쪽의 for 루프는 배열의 끝에서부터 시작하여 정렬되지 않은 부분을 하나씩 줄여나가는 역할을 합니다.
안쪽의 for 루프는 현재 정렬되지 않은 부분에서 인접한 두 원소를 비교하고 조건에 맞지 않으면 교환하는 역할을 합니다. 따라서 내부 루프가 한 번 실행되면 가장 큰 원소가 정렬된 부분의 맨 끝으로 이동합니다.
즉, 바깥쪽 루프는 배열의 끝에서부터 시작하여 정렬되지 않은 부분을 하나씩 줄여나가고, 안쪽 루프는 현재 정렬되지 않은 부분에서 인접한 두 원소를 비교하고 정렬하는 역할을 합니다. 이를 통해 전체 배열이 정렬되게 됩니다.
<?php
//배열과 버블정렬
//임의의 배열을 만든다.
$num = array(12,53,566,2345,22,555,21,44);
$count = 8;
//정렬 전
echo "정렬 전";
for($i = 0; $i < $count ;$i++){
echo "$num[$i] ";
}
//오름차순
for($i = $count -2; $i>=0; $i--){
for($j = 0 ; $j<=$i; $j++){
if($num[$j]>$num[$j+1]){
$temp = $num[$j];
$num[$j] = $num[$j+1];
$num[$j+1] = $temp;
}
}
}
echo "<br>";
//정렬 후
echo "정렬 후";
for($i = 0; $i < $count ;$i++){
echo "$num[$i] ";
}
?>
버블정렬 내림차순하려면????
주의할 점은 비교 부분에서 부등호 방향을 바꿔주면 됩니다. 오름차순에서는 $num[$j] > $num[$j + 1]이지만, 내림차순으로 변경할 때는 $num[$j] < $num[$j + 1]로 바꿔야 합니다.
<?php
//배열과 버블정렬
//임의의 배열을 만든다.
$num = array(12,53,566,2345,22,555,21,44);
$count = 8;
//정렬 전
echo "정렬 전";
for($i = 0; $i < $count ;$i++){
echo "$num[$i] ";
}
//내림차순
for($i = $count -2; $i>=0; $i--){
for($j = 0 ; $j<=$i; $j++){
if($num[$j] < $num[$j+1]){
$temp = $num[$j];
$num[$j] = $num[$j+1];
$num[$j+1] = $temp;
}
}
}
echo "<br>";
//정렬 후
echo "정렬 후";
for($i = 0; $i < $count ;$i++){
echo "$num[$i] ";
}
?>
2차원 배열
array 안에 정의해주는 array도 마찬가지로 array() 함수를 이용해서 정의해야만 한다. 그냥 ( )만 넣으면 오류남!!!
<?php
//2차원 배열
$score = array(array(2,3,4,33), array(2,3,5,11), array(11,45,11,14));
//2 3 4 33
//2 3 5 11
//11 45 11 14의 모양을 가지는 score[2][3]짜리 2차원 배열이다.
echo $score[1][2]; //5 출력될
?>
<?php
//2차원 배열
$score = [[2,3,4,33], [2,3,5,11],[11,45,11,14]];
//2 3 4 33
//2 3 5 11
//11 45 11 14의 모양을 가지는 score[2][3]짜리 2차원 배열이다.
echo $score[1][2]; //5 출력될
?>
2차원 배열을 이용하여 성적의 합계와 평균 구하기
배열명[행][열] [세로 크기][가로 크기]
이중 for문 작성할 때 바깥에는 세로 기준이고, 안에는 가로 기준임.
세로1 -> 가로 주루룩 데이터 훑고
세로2 로 넘어감!
2차원 배열의 값을 " "로 감싸게 되면 오류 발생 !!
2차원 배열의 값은 큰 따옴표로 감싸면 안 된다 !!!!!!!
<?php
//2차원 배열이 됨
//아래와 같은 모양
//88 98 96 77 63
//86 77 ...
//74 83 95 8....
//score[0][0] ~score[2][4] 세로 가로 크기
$score = array(array(88,98,96,77,63), array(86,77,66,86,93),array(74, 83, 95, 86, 97));
for($i = 0; $i<3; $i++){
for($j = 0; $j<5; $j++){
echo "\$score[$i][$j] ="."$score[$i][$j]"."<br>";
}
}
?>
2차원 배열의 값에 " "를 없애면 오류가 발생하지 않는다.
<?php
//3명의 학생이 존재하고, 각 학생은 5개의 과목에 대한 평균 값을 가지고 있다.
//1. 학생별 모든 과목의 평균은?
$score = array(array(88,98,96,77,63), array(86,77,66,86,93),array(74, 83, 95, 86, 97));
for($i = 0; $i <3; $i++){ //행 기준으로 먼저(학생별)
for($j = 0; $j <5; $j++){//모든 과목 값 가져오기
echo "\$score[$i][$j] = ".$score[$i][$j]."<br>";
}
echo "<br>";
}
echo "<br>";
for($i = 0; $i <3; $i++){ //행 기준으로 먼저(학생별)
$sum = 0;
for($j = 0; $j <5; $j++){//모든 과목 값 가져오기
$sum += $score[$i][$j];
}
$avg = $sum / 5;
echo "$i 번 학생의 점수 => 합계 : {$sum}, 평균 : $avg<br>";
}
echo "<br>";
//2. 과목별 평균은??
//행 먼저 쭈루룩 실행해야 됨
for($i = 0; $i <5; $i++){ //각 학생에 대해(열)
$sum2 = 0;
for($j = 0; $j <3; $j++){ //모든 과목(행)
$sum2 += $score[$j][$i];
}
$avg = $sum2 / 3;
echo "과목 $i 번째의 합계 : $sum2 평균 : $avg <br>";
}
?>
1차원 배열의 값은 echo 문에서 " "로 감싸줘도 결과가 잘 출력이 된다.
$score = array('dd','ddw');
echo "$score[0]";
?>
합계 초기화하는 부분 중요 !!!! 학생마다의 합계와 평균을 구해야 하니깐 !
<?php
//2차원 배열이 됨
//아래와 같은 모양
//88 98 96 77 63
//86 77 ...
//74 83 95 8....
//score[0][0] ~score[2][4] 세로 가로 크기
$score = array(array(88,98,96,77,63), array(86,77,66,86,93),array(74, 83, 95, 86, 97));
for($i = 0; $i<3; $i++){
for($j = 0; $j<5; $j++){
echo "\$score[$i][$j] =".$score[$i][$j]."<br>";
}
echo "<br>";
}
//3명 학생의 성적 합계와 평균
for($i = 0; $i<3; $i++){
$sum = 0; //값 초기화
for($j = 0; $j<5; $j++){
$sum += $score[$i][$j];
}
$avg = $sum / 5;
$student_num = $i+1;
echo "$student_num 번 학생의 점수 => 합계 : {$sum}, 평균 : $avg<br>";
}
?>
배열은 $배열명[$인덱스변수]의 형태로 while문이나 for문 같은 반복문과 함께 사용된다.
연습 문제
03.
$배열명[$인덱스명]
배열도 마지막은 세미콜론 꼭 붙이기 !!!
<?php
$subject = array('파이썬', 'php', '자바스크립트', '사진', '영화감상');
$name = array('ㄱ','ㄴ','ㄷ','ㄹ','ㅁ','ㅂ','ㅅ','ㅇ','ㅈ','d');
//각 과목당 10명의 학생 성적을 나타낸 2차원 배열
$score=array(array(80,79,90,89,100,87,85,83,96,99),
array(70,88,70,85,60,95,77,89,82,93),
array(80,79,90,89,100,87,85,83,96,99),
array(70,88,70,85,60,95,77,89,82,93),
array(80,79,90,89,100,87,85,83,96,99)
);
//학생별로 5개 과목의 성적 합계와 평균
for($i = 0; $i <10; $i++){
$sum = 0;
for($j=0; $j <5;$j++){
$sum += $score[$j][$i];
}
$avg = $sum / 5;
echo "$name[$i] 학생의 합계: $sum, 평균: $avg<br>";
}
?>
2단 구구단 만들기 2
1. 이중 for문 사용해서 만들기
2. 2차원 배열에 저장해놓은 값 출력하기
1) 하나의 값이 한 줄에 9개 있다. for문
2) 1)에서 만든 하나의 행이 9번 반복된다. for문
=> 이중for문
<?php
//2차원 배열에 곱한 값들 저장하기
//행별로 2~9단 값 저장할 거임
echo "<table border='1'>
<tr><td>2단</td><td>3단</td><td>4단</td><td>5단</td><td>6단</td><td>7단</td><td>8단</td><td>9단</td></tr>";
for($r=0; $r<=7; $r++){
for($c=0; $c<=8; $c++){
$result[$r][$c] = ($r+2)*($c+1);
}
}
//저장한 값 불러오기
//각 tr에 2,3,4,,,, 이니깐 세로 기준 쭈루룩이어야 됨
for($c=0; $c<=8; $c++){
echo "<tr>";
for($r=0; $r<=7; $r++){
$a = $r +2;
$b = $c + 1;
$re = $result[$r][$c];
echo "<td> $a * $b = $re </td>";
}
echo "</tr>";
}
echo "</table>";
?>
함수
함수는 내장 함수와 사용자 함수가 있다.
함수는 정의(define)과 호출(call)로 나뉜다.
출력 시 사용되는 키워드는 return
return문으로 함수의 값이 반환되면 바로 함수가 종료된다.
함수 안에 return문이 여러 개 있다면 맨 처음에 존재하는 return문의 값만 반환된다.
return을 했다고 해도 화면에 보여주기 위해서는 echo 문장에서 함수를 호출해야 한다.
<?php
function a(){
return 'a';
return 'b';
return 'c';
}
echo a();
?>
입력 시 사용되는 것은 매개변수(인자)
$arg =1;이라고 정의해주는 것과 마찬가지이다.
복수의 입력값도 넣어줄 수 있다.
<?php
function a($arg){
return $arg;
}
print a(1);
?>
<?php
function a($arg1, $arg2){
return $arg1 + $arg2;
}
echo a(10,20);
echo a(20,30);
?>
함수 내에서 할당된 변수는 그 지역에서만 유효하다. 그 지역 바깥으로 나오면 존재하지 않는 변수이다.
함수 안 = 지역 변수/ 함수 바깥 = 전역 변수
함수를 이용하여 문자열 출력
<?php
//함수 정의
function hello(){
echo "안녕하세요!";
}
//함수 호출
hello();
?>
함수 매개변수 이용해서 두 수 합 구하기
<?php
//함수 정의
function plus($a, $b){
$c = $a +$b;
echo $c;
}
//함수 호출
plus(10,20);
echo "<br>";
plus(300,500);
?>
함수의 반환 값 이용해서 두 수 합 구하기(return)
<?php
//함수 정의
function plus($a, $b){
$c = $a +$b;
return $c;
}
//함수 호출
$result1 = plus(10,20);
echo $result1."<br>";
$result2 = plus(300,500);
echo $result2."<br>";
?>
함수의 반환 값 이용해서 정수 합 구하기
<?php
//함수 정의
function plus($a, $b){
$sum = 0;
for($i = $a; $i <=$b; $i++)
{
$sum +=$i;
}
return $sum;
}
//함수 호출
$result1 = plus(1,100);
echo $result1."<br>";
?>
함수의 반환 값 이용해서 만 나이 계산하기
<?php
//함수 정의
function age($year, $month, $day, $b_y, $b_m, $b_d){
//달 기준으로 3개
if($month >$b_m){
$age = $year-$b_y;
}
else if($month ==$b_m){
if($b_d<$day){
$age = $year-$b_y;
}
else{
$age = $year-$b_y-1;
}
}
else{
$age = $year-$b_y-1;
}
return $age;
}
echo age(2023,10,17,2002,11,22);
?>
함수를 이용하여 입장료 계산하기
내장 함수
<?php
$tel = "010-2222-1111";
echo "\$tel : $tel <br>";
$num_tel = strlen($tel);
//문자열 길이
echo "$num_tel<br>";
$tel1 = substr($tel,0,3);
echo "$tel1<br>";
$tel2 = substr($tel,4,4);
echo "$tel2<br>";
$tel3 = substr($tel,9,4);
echo "$tel3<br>";
$phone = explode('-',$tel);
echo "$phone[0] $phone[1] $phone[2]"
?>
'웹프로그래밍' 카테고리의 다른 글
헷갈리는 개념 재정리 (1) | 2023.10.19 |
---|---|
[PHP 프로그래밍 입문 8장] 쿠키와 세션 (1) | 2023.10.18 |
[PHP 프로그래밍 입문 4장 반복문] while문, for문, do ~ while문 (1) | 2023.10.17 |
[PHP 프로그래밍 입문 7장] HTTP와 POST, GET 방식 (1) | 2023.10.16 |
[PHP 프로그래밍 입문 3장] 조건문 if문과 switch문 (0) | 2023.10.16 |