웹개발/PHP

[PHP] Boolean과 비교연산자, 조건문, 반복문, 배열 by.생활코딩

ruming 2021. 1. 24. 22:12

 

지난 포스팅에서는 php의 변수, 문자열, url 파라미터, 함수 등을 공부했다.

이번 포스팅에서는 Boolean과 비교연산자, 조건문, 반복문, 배열까지 알아볼 것이다.

 

사용 함수

#var_dump

#isset

#unset

#empty

#count

#array_push

#scandir

 

 

Boolean과 비교연산자

 

#BOOLEAN

#COMPARISON OPERATOR

 

Booleantrue or false 두 가지의 값만 가지는 데이터 타입이다.

보통 참은 1, 거짓은 0이다.

 

Boolean과 비교연산자, 논리연산자에 대한 설명은 아래 링크에 첨부하겠다.

링크

 

 

#var_dump

 

새로운 함수에 대해 알아보자.

var_dump함수는 변수의 정보를 출력해주는 함수이다.

예제 확인

 

간단하게 확인해보자.

<!DOCTYPE html>
<html>
  <body>
    <?php
      echo var_dump(3);
      echo var_dump("hello");
      echo var_dump('23');
    ?>
  </body>
</html>

 

위와 같이 나온다.

 

여기서 1==1을 함수 안에 넣으면 어떻게 될까?

<!DOCTYPE html>
<html>
  <body>
    <?php
      echo var_dump(1==1);
    ?>
  </body>
</html>

 

참으로 표시된다. boolean값이다.

1==2를 넣는다면 false가 나올 것이다.

 

비교 연산자

== 같다
!= 같지 않다
>, < (우항보다 좌항이)크다, 작다
>=, <= (우항보다 좌항이)크거나 같다, 작거나 같다

 

비교연산자를 사용해도 마찬가지로 그 결과에 따라 true or false 값이 나온다.

예를 들어 1>2는 false가, 3<5는 true가 나온다.

 

 


 

조건문의 형식

 

#CONDITIONAL STATEMENTS

 

조건문에 대해 알아볼 차례이다.

 

#if문

if문의 형식은 다음과 같다.

if(조건){
	실행문;
}else if(조건){
	실행문;
}else{
	실행문;
}

 

조건이 많으면 중간에 else if로 계속 조건을 넣는데,

조건이 하나면 그냥 if만으로 끝낸다. 

 

조건의 값이 true일 때 실행되고, false이면 실행되지 않는다.

조건이 여러 개인 경우 앞에서부터 조건을 검사해 앞이 false이면 다음 조건을 검사한다.

 

<!DOCTYPE html>
<html>
  <body>
    <?php
      if(1){
        echo 5;
      }
    ?>
  </body>
</html>

위와 같이 코드를 따면 1은 참이기 때문에 (php에서도 1은 참, 0은 거짓이다.)

5가 출력될 것이다.

 

if문

 

<!DOCTYPE html>
<html>
  <body>
    <?php
      if(0){
        echo 5;
      }else{
        echo 10;
      }
    ?>
  </body>
</html>

0은 거짓이므로 5는 출력되지 않고 10이 출력된다.

 

 

<!DOCTYPE html>
<html>
  <body>
    <?php
      $a = 5;
      $b = 10;
      if(a>b){
        echo 5;
      }else if(a<b){
        echo 10;
      }else{
        echo 0;
      }
    ?>
  </body>
</html>

변수 두 개를 만들어서 5와 10을 대입했다.

b가 a보다 크기 때문에 5는 출력하지 않고 10을 출력할 것이다.

만약 else if에 있는 조건도 false라면 else의 실행문이 출력된다.

 

 

 

 


조건문의 활용

 

조건문의 활용이다.

조건문을 이용해 저번 시간에 만들었던 index.php를 발전시킬 것이다.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>WEB</h1>
    <ol>
      <li><a href="index.php?id=HTML">HTML</a></li>
      <li><a href="index.php?id=CSS">CSS</a></li>
      <li><a href="index.php?id=JavaScript"></a>JavaScript</li>
    </ol>
    <h2>
      <?php
        echo $_GET['id'];
      ?>
    </h2>
    <?php echo file_get_contents("data/".$_GET['id']); ?>
  </body>
</html>

index.php 소스코드다.

h1태그로 적혀있는 WEB에 링크로 걸어 index.php로 이동하도록 할 것이다.

그리고 조건문을 이용해 파라미터가 없을 때는 welcome을 띄우도록 만들 것이다.

 

php check value exists

위와 같이 검색하면 함수 하나를 찾을 수 있다.

 

#isset

isset 함수는 변수가 설정되었는지 확인하는 함수다.

isset($var);

변수가 설정되었으면 true, 그렇지 않으면 false를 반환한다.

 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1><a href="index.php">WEB</h1>
    <ol>
      <li><a href="index.php?id=HTML">HTML</li>
      <li><a href="index.php?id=CSS">CSS</li>
      <li><a href="index.php?id=JavaScript">JavaScript</li>
    </ol>
    <h2>
      <?php
       if(isset($_GET['id'])){
         echo $_GET['id'];
       }else{
         echo "Welcome";
       }
      ?>
    </h2>
    <?php
      if(isset($_GET['id'])){
        echo file_get_contents("data/".$_GET['id']);
      }else{
        echo "Hello, PHP";
      }
    ?>
  </body>
</html>

위 코드는 if문의 조건식에 id가 존재하면 출력하고, 존재하지 않으면 Welcome을 출력한다.

문서 내용을 읽어 오는 코드에도 조건식을 이용해 id가 있으면 문서 내용을 가져와 출력하도록 했다.

 

index.php

기본 화면이다.

 

리스트 하나를 클릭하면 해당 문서를 보여준다.

 

더보기

php 문서에 잠깐 나온 unset 함수에 대해 알아보자.

#unset

unset 함수는 변수에 주어진 값을 제거하는 것이다.

상황에 따라 지역변수만 제거해 그 전 값을 유지하게 할 수도 있다.

 

<!DOCTYPE html>
<html>
  <body>
    <?php
      $a = 100;
      echo isset($a);
      unset($a);
      echo "<br>";
      if(isset($a)){
        echo "o";
      }
      else {
        echo "x";
      }
    ?>
  </body>
</html>

먼저 a라는 변수에 100이라는 값을 주고 출력했다.

그 다음 unset함수로 a의 값을 지우고 조건문과 isset 함수를 이용해 

변수 a가 존재하면 o, 그렇지 않으면 x를 출력하도록 코드를 짰다.

 

x가 나왔으므로 a의 값을 제거한 것으로 확인된다.

 

다음으로 empty 함수에 대해서도 알아보자.

#empty  

empty 함수는 변수가 비었는지 확인하는 함수다.

비었으면 true, 비어 있지 않으면 false를 반환한다.

 

<!DOCTYPE html>
<html>
  <body>
    <?php
      $a = 100;
      echo $a;
      unset($a);
      echo "<br>";
      if(empty($a)){
        echo "empty = 1";
      }
      else {
        echo "empty = 0";
      }
    ?>
  </body>
</html>

아까의 코드를 약간 고쳐보았다.

empty는 비었는지 확인하는 함수니 만약 변수가 비었다면 empty = 1을 출력할 것이다.

 

 

참고


반복문의 형식

 

#LOOP STATEMENTS

*검색엔진에서 site:php.net [검색문구]라고 검색하면 php사이트 내의 검색 목록이 나온다.

 

#while문

 

while문은 반복문이다.

형식은 if문과 같고, 조건식이 true일 때마다 실행문을 돌리고 다시 조건식을 검사한다.

조건에 true나 1이 들어가 있으면 무한으로 반복되고(무한루프),

보통 변수를 이용해 횟수를 제한한다.

 

<!DOCTYPE html>
<html>
  <body>
    <?php
      $a = 0;
      while($a < 10){
        echo $a."<br>";
        $a+=1;
      }
    ?>
  </body>
</html>

위와 같이 코드를 짜면 0부터 9까지 출력될 것이다.

a가 0부터 시작하기 때문에 0<10, 1<10을 계속 검사하고 true일때마다 a값을 출력한다.

그러다가 마지막으로 9<10에서 9가 출력되고, 10<10은 false이므로 반복문이 멈춘다.

 

 


배열의 형식

 

#ARRAY

 

배열에는 데이터를 여러 개 저장할 수 있다.

사용 방법은 다음과 같다.

<!DOCTYPE html>
<html>
  <body>
    <?php
      $var = array('A', 'B', 'C');
      echo $var[1];
    ?>
  </body>
</html>

변수를 하나 만들어서(배열의 이름이 된다)

넣고 싶은 데이터를 집어넣고, 출력 방식은 $배열이름[순서]; 이다.

배열은 0부터 카운트하기 때문에, 위 코드는 1번째인 B가 출력될 것이다.

 

 

배열에 있는 총 데이터의 수

▽검색어▽

php array total count

 

#count

배열에 있는 데이터의 개수를 셀 수 있는 함수다.

<!DOCTYPE html>
<html>
  <body>
    <?php
      $var = array('A', 'B', 'C');
      echo $var[1].'<br>';
      echo count($var);
    ?>
  </body>
</html>

배열의 인덱스는 0부터 시작하지만, 개수는 평범하게 센다.

3개가 있으므로 3이 출력될 것이다.

 

 

배열에 데이터를 추가하고 싶을 때

▽검색어▽

php array add value

 

#array_push

array_push함수는 배열에 데이터를 추가해주는 함수다.

array_push($배열 이름, '추가할 데이터', ...);

<!DOCTYPE html>
<html>
  <body>
    <?php
      $var = array('A', 'B', 'C');
      echo $var[1].'<br>';
      echo count($var).'<br>';
      array_push($var, 'D', 'E', 'F');
      echo var_dump($var);
    ?>
  </body>
</html>

 

편하게 보기 위해 페이지 소스코드로 가져왔다.

처음에는 배열에 A, B, C만 있었는데 array_push함수를 사용하니 var배열에 D, E, F가 추가되었다. 

 

그 외 php 배열에 관한 함수는 따로 포스팅 하겠다.


반복문과 조건문의 활용1~3

 

▽검색어▽

php get file list in directory

 

#scandir

디렉토리 정보를 출력하는 함수이다.

 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1><a href="index.php">WEB</h1>
    <ol>
      <?php
        $list = scandir('./data');
        var_dump($list);
      ?>
    </ol>
    <h2>
      <?php
       if(isset($_GET['id'])){
         echo $_GET['id'];
       }else{
         echo "Welcome";
       }
      ?>
    </h2>
    <?php
      if(isset($_GET['id'])){
        echo file_get_contents("data/".$_GET['id']);
      }else{
        echo "Hello, PHP";
      }
    ?>
  </body>
</html>

<li>태그를 없애고 data파일에서 파일을 읽어오도록 했다. list라는 배열에 파일이 들어갈 것이다.

scandir('data')라고 해도 되고, ./의 의미는 현재 디렉토리라는 뜻이다.

참고로 ..는 부모 디렉토리이다.

 

list라는 배열에 파일이 다 들어갔다.

*php에서 "로 감싸진 부분은 변수를 인식한다.

php array elements count

 

다음으로 반복문을 사용해 리스트가 자동으로 생기도록 할 것이다.

count함수를 사용하면 반복문이 파일의 개수만큼 반복하도록 할 수 있다.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
        $list = scandir('./data');
        $i = 2;
        while($i < count($list)){
          echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>";
          $i = $i + 1;
        }
      ?>
    </ol>
    <h2>
      <?php
       if(isset($_GET['id'])){
         echo $_GET['id'];
       }else{
         echo "Welcome";
       }
      ?>
    </h2>
    <?php
      if(isset($_GET['id'])){
        echo file_get_contents("data/".$_GET['id']);
      }else{
        echo "Hello, PHP";
      }
    ?>
  </body>
</html>

 

 

i를 2부터 시작한 이유는 .과 ..을 리스트에서 제외하기 위함이었는데,

그 순서가 항상 1, 2번째인지는 모르기 때문에 확실하게 제외시켜보도록 하자.

if문을 사용해 .과 ..인 경우를 제외시키면 된다.

여기서 논리연산자가 사용된다.

 

논리연산자 기호 의미
a&&b (and) a와 b가 모두 참이면 참
a||b (or) a와 b 둘 중 하나가 참이면 참
!a (not a가 참이면 거짓, 거짓이면 참

 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
        $list = scandir('./data');
        $i = 0;
        while($i < count($list)){
          if($list[$i]!='.'&&$list[$i]!='..'){
            echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>";
          }
          $i = $i + 1;
        }
      ?>
    </ol>
    <h2>
      <?php
       if(isset($_GET['id'])){
         echo $_GET['id'];
       }else{
         echo "Welcome";
       }
      ?>
    </h2>
    <?php
      if(isset($_GET['id'])){
        echo file_get_contents("data/".$_GET['id']);
      }else{
        echo "Hello, PHP";
      }
    ?>
  </body>
</html>

if($list[$i]!='.'&&$list[$i]!='..')

==은 같다는 의미고 !=은 그 반대다.

list 값이 .이 아니고 ..도 아닐 때만(and) echo를 실행하는 if문이다.

 

결과는 똑같다.

제대로 적용된 것 같다.

지금까지 완성된 index.php의 기능은

1. data파일에 파일을 추가하면 리스트에 추가되고

2. 리스트를 누르면 해당 문서로 넘어가고

3. 파라미터가 없으면 페이지에 Welcome / Hello, PHP를 띄운다.

 

오늘 포스팅은 여기서 마친다.

다음 포스팅은 함수 만들기부터 웹의 다양한 기능을 공부할 것이다.

 

그리고 다양한 함수 - 배열 관련 함수, 디렉토리 관련 함수 등을 따로 모아 포스팅 할 예정이다.