본문 바로가기

프로그래밍 공부/PHP

PHP - 연관 배열, 연산자 그리고 조건문

연관 배열

연관 배열은 배열과 같이 여러 개의 데이터를 할당할 수 있는 상자를 가지고 있다. 각 상자는 임의의 이름(키)을 붙이는 것으로 상자를 식별할 수 있다. 키와 데이터를 관련지어 보관하고 싶을 때 연관 배열을 사용한다. 예로 회원 한 명의 이름과 주소나 전화번호와 같은 데이터를 조작할 때 편리하게 사용할 수 있다.

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
<?php
    // 연관 배열에 이름($member)을 붙인다.
    // [""]을 이용해서 키를 지정한다.
    // ""을 이용해 지정된 키에 값을 할당한다.
    $member["name"= "김철수";
    $member["age"= "30";
    $member["height"= "180";
    $member["weight"= "70";
 
    // 연관 배열의 데이터를 출력한다.
    print $member["name"];
    print "<br>";
    print $member["age"];
    print "<br>";
    print $member["height"];
    print "<br>";
    print $member["weight"];
 
    // array 함수도 가능하다.
    $memder = array("name" => "박은혜","age" => "25","height"=>"165","weight"=>"48");
 
    // 연관 배열의 데이터를 출력한다.
    print $member["name"];
    print "<br>";
    print $member["age"];
    print "<br>";
    print $member["height"];
    print "<br>";
    print $member["weight"];
?>
cs

데이터를 할당하는 방법과 출력하는 방법은 위와 같다. 배열과 연관 배열을 사용하는 다차원 배열을 사용할 수 있는데, 주로 데이터베이스를 다룰 때 사용한다. 

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
32
33
34
35
36
37
38
39
<?php
    $member[0= array("name" => "John","age" => "30","height"=>"180","weight"=>"80");
    $member[1= array("name" => "James","age" => "27","height"=>"178","weight"=>"72");
    $member[2= array("name" => "Tony","age" => "25","height"=>"179","weight"=>"75");
    $member[3= array("name" => "Mary","age" => "31","height"=>"165","weight"=>"45");
    $member[4= array("name" => "Susan","age" => "29","height"=>"166","weight"=>"47");
 
    print "0번";
    print "<br>";
    print $member[0]["name"];
    print "<br>";
    print $member[0]["age"];
    print "<br>";
    print $member[0]["height"];
    print "<br>";
    print $member[0]["weight"];
    print "<hr>";
    
    print "1번";
    print "<br>";
    print $member[1]["name"];
    print "<br>";
    print $member[1]["age"];
    print "<br>";
    print $member[1]["height"];
    print "<br>";
    print $member[1]["weight"];
    print "<hr>";
    
    print "2번";
    print "<br>";
    print $member[2]["name"];
    print "<br>";
    print $member[2]["age"];
    print "<br>";
    print $member[2]["height"];
    print "<br>";
    print $member[2]["weight"];
?>
cs

배열의 인덱스(0번, 1번, 2번...)에 각각의 이름(키)를 가지는 값을 할당하는 방법이다. 또한 배열과 연관 배열에는 PHP에서 사용하는 모든 데이터형을 할당할 수 있다.

연산자

산술 연산자는 사칙연산같이 기본적인 계산을 위한 연산자이다.

연산자 작성 예 의미
+ 5 + 1 덧셈
- 5 - 2 뺄셈
* 5 * 3 곱셈
/ 5 / 5 나눗셈
% 5 % 3 나머지

수치를 직접 작성하거나 $a + $b와 같이 변수로 지정할 수 있다. 그 외에는 자바스크립트의 연산자와 같다.

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
<?php
    // 덧셈
    $answer = 5 + 1;
    print "5 + 1 = $answer";
    print "<br>";
 
    // 뺄셈
    $answer = 5 - 2;
    print "5 - 2 = $answer";
    print "<br>";
 
    // 곱셈
    $answer = 5 * 3;
    print "5 * 3 = $answer";
    print "<br>";
 
    // 나눗셈
    $answer = 5 / 5;
    print "5 / 5 = $answer";
    print "<br>";
 
    // 나머지
    $answer = 5 % 3;
    print "5 % 3 = $answer";
    print "<br>";
?>
cs

할당 연산자는 변수나 배열에 데이터를 할당(대입)할 때에 사용한다. 그 외에 기능도 존재한다.

연산자 작성 예 의미
= $num = 20; 변수 $num에 20을 할당한다.
+= $num += 20; 변수 $num에 20을 더하여 할당한다.
.= $string .= "문자열"; 변수 $string에 문자열을 연결하여 할당한다.

+= 같은 경우는 자바스크립트에 복합 대입 연산자 유사한 개념이다. 

.= 는 자바스크립트의 .concat() 메서드나 문자열끼리 +으로 연결한 것과 유사하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    // += 연산자
    $data = 20;
    $age = $data;
    $age += 5;
    print $age;
    print "<br>";
 
    // .= 연산자
    $data = '김철수';
    $name = $data;
    $name .= "박은혜";
    print $name;
    print "<br>";
?>
cs

비트 연산자는 비트 단위로 데이터를 조작하기 위해 존재한다. 연산 결과는 정수이다. PHP로 웹 애플리케이션을 작성할 때는 거의 사용되지 않는다.

연산자 작성 예 의미
& $a & $b AND(논리곱)
! $a ! $b OR(논리합)
^ $a ^ $b XOR(배타적 논리합)
~ ~ $a NOT(부정)
<< $a << $b left shift(왼쪽 시프트)
>> $a >> $b right shift(오른쪽 시프트)

&를 예로 들면 $a & $b와 같이 작성을 하면 $a, $b에 할당된 변수를 이진수로 인식하고 양쪽의 각 항의 비트 그대로 논리곱을 계산하게 된다. 양쪽의 비트가 1인 경우에만 결과가 1이 되는 연산 처리를 한다. 

예시로 0 & 0인 경우 0을 출력한다. 또한 1 & 1인 경우에는 1을 출력한다. 1 & 0 또는 0 & 1인 경우는 전부 0을 출력하게 된다.

비교 연산자는 if문, 삼항 연산자나 반복문에서 주로 사용하게 된다. 자바스크립트의 비교 연산자와 유사한 기능을 한다.

연산자 작성 예 의미
== $a == $b $a와 $b가 같다.
=== $a === $b $a와 $b가 같고, 같은 자료형이다.
!= $a != $b $a가 $b와 같지 않다.
<> $a <> $b $a가 $b와 같지 않다.
!== $a !== $b $a가 $b와 같지 않고, 같은 자료형이 아니다.
< $a < $b $a가 $b보다 작다.
> $a > $b $a가 $b보다 크다.
<= $a <= $b $a가 $b보다 작거나 같다.
>= $a >= $b $a가 $b보다 크거나 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    // [1] 출력
    print true;
    print "<br>";
    // 아무것도 출력하지 않음
    print false;
    print "<br>";
    // [1] 출력
    print (5 == 5);
    print "<br>";
    // 아무것도 출력하지 않음
    print (5 == 4);
?>
cs

삼항 연산자는 ?와 :을 이용해서 구문을 작성한다. 비교 연산자로 구성한 조건식의 비교 결과가 TRUE일 경우에는 값 1을 $변수에 할당을 하게 되고, FALSE일 경우에는 값 2를 $변수에 할당을 하게 된다. if문을 사용하는 것보다 간편하게 한 행에 작성이 가능하기 때문에 널리 사용하는 연산자 중에 하나이다.

1
2
3
4
5
6
7
<?php
    $age = 19;
    $adult_age = 20;
    $adult_check = ($adult_age <= $age)?"어른":"아이";
    
    print $adult_check." 입니다.";
?>
cs

오류 제어 연산자는 PHP 식(함수나 변수) 앞에 붙이는 것으로 식에 오류가 있어도 오류 메세지를 무시할 수 있게 만든다. 오류 제어 연산자는 @로 변수, 함수, include(), 정수의 앞에 붙일 수 있다. 함수의 정의 부분이나 foreach문, 조건문의 앞에는 붙일 수 없다. 경로 오류와 같은 메세지는 @를 붙여도 출력이 된다.

프로그래밍중에 이 연산자를 사용하면 오류가 발생하더라도 어딘지 확인할 수 없게 되므로 어떤 상황이든 오류를 출력하고 싶지 않을 때만 사용해야한다.

실행 연산자는 PHP를 실행하고 있는 windows나 Mac, Linux 같은 OS의 명령을 실행하기 위해 사용된다. 실행을 위해서는 ``(백쿼터)를 사용한다. 

1
2
3
4
5
6
7
8
<?php
    $filelist = `ls -laF`;
    // $filelist = `dir`;
 
    print "<PRE>";
    print $filelist;
    print "</PRE>";
?>
cs

위의 코드를 windows에서 실행하는 경우 $filelist = `dir`;로 명령을 변경하게 된다.

증가 연산자는 프로그램에서 변수에 1을 더하거나 1을 빼는 처리를 할 때 사용한다. 자바스크립트에서도 ++나 --등을 사용하는 것과 같다.

연산자 작성 예 의미
++ ++$count $count를 1 증가시키고, $count를 반환한다.
++ $count++ $count를 반환하고 $count를 1 증가시킨다.
-- --$count $count를 1 감소시키고 $count를 반환한다.
-- $count-- $count를 반환하고 $count를 1 감소시킨다.

논리 연산자는 비교 연산자에서 작성한 조건식을 여러 개로 조합할 때 사용한다. 주의할 점은 &&||andor 보다 우선순위가 높다.

연산자 작성 예 의미
and $a and $b 논리곱인 $a와 $b가 모두 TRUE면 TRUE
or $a or $b 논리합인 $a나 $b가 TRUE면 TRUE
xor $a xor $b 배타적 논리합인 $a와 $b중 하나만 TRUE일 때만 TRUE
! !$a 부정인 $a가 TRUE가 아니면 TRUE
&& $a && $b 논리곱인 $a와 $b가 모두 TRUE면 TRUE
|| $a || $b 논리합인 $a나 $b가 TRUE면 TRUE

배열 연산자는 배열에 배열을 추가하기 위한 연산자이다. $c = $a + $b와 같이 +를 사용한다. 배열을 추가할 때는 키가 같은 것이 이미 있으면 덮어쓰지 않는다.

1
2
3
4
5
6
7
8
9
10
<?php
    $data1 = array("name" => "김철수""age" => 20);
    $data2 = array("name" => "박은혜""age" => 30"tall" => 180);
    $data = $data1 + $data2;
    
    print "<PRE>";
    // var_dump 함수는 배열의 구조를 표시해준다.
    var_dump($data);
    print "</PRE>";
?>
cs

if문

자바스크립트의 if 조건문과 같다. 단순 if문과 if else문을 사용하는것도 자바스크립트와 같다.

1
2
3
4
5
6
7
8
9
10
11
<?php
    $username = "user";
    $password = "pass";
    $db_data["username"= "user";
    $db_data["password"= "pass";
 
    // if문 시작
    if($db_data["username"== $username && $db_data["password"== $password){
        print "회원 페이지입니다.";
    }
?>
cs

$db_data의 값는 데이터베이스에서 취득한 데이터가 할당이 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    $username = "user";
    $password = "pass";
    $db_data["username"= "user";
    $db_data["password"= "pass";
 
    // if문 시작
    if($db_data["username"== $username && $db_data["password"== $password){
        print "회원 페이지입니다.";
    }else{
        print "로그인에 실패하였습니다.";
    }
?>
cs

if else문은 FALSE일 경우에 처리를 추가하는 기능이다. 이전에 삼항 연산자에 대해 설명을 했었는데, 삼항 연산자와 if문은 서로 바꿔 사용도 가능하다.

1
2
3
4
5
6
7
8
9
10
<?php
    $adult_check = ($adult_age <= $age)? "어른":"아이";
 
    // 위와 같은 코드이다.
    if($adult_age <= $age){
        $adult_check = "어른";
    }else{
        $adult_check = "아이";
    }
?>
cs

switch문

if else문은 조건식이 하나만 있지만, 여러 조건식을 판단하려면 if else if else문을 사용한다. 

1
2
3
4
5
6
7
8
9
10
11
<?php
    $type = "form";
    
    if($type == "form"){
        print "등록 폼입니다.";
    }else if($type == "exec"){
        print "등록 처리를 실행 중";
    }else{
        print "화면이 없습니다.";
    }
?>
cs

 

조건이 많을수록 else if가 여러개가 만들어지게 되고 코드가 길어진다. 여러 개의 조건식에 if문을 여러번 포함하면 가독성이 떨어질 수 있고, 의도대로 프로그램이 작동하지 않을 수 있기 때문에 이 경우에는 switch문을 사용하게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    $type = "form";
    
    // switch문 시작
    switch($type){
        case "form":
            print "등록 폼입니다.";
            break;
        case "confirm":
            print "확인 화면입니다.";
            break;
        case "exec":
            print "등록 처리를 실행 중";
            break;
        default:
            print "화면이 없습니다.";
    }
?>
cs

주의할 점은 switch문에서 시작한 처리는 반드시 break문으로 완료해야 한다.