php의 반복문, do-while문과 foreach문

포스트 썸네일 이미지

생활코딩 php 수업 영상에서는 다루지 않은 반복문, do-while문foreach문에 대해서도 정리하고 넘어가기로 했다.

내가 글에서 foreach문을 자주 언급하면서 정리는 안하고 넘어가는 게 찝찝해서 그냥 쓴다.




이전 포스트




do-while문


do-while문의 흐름

do-while문의 흐름도다.


do-while문은 조건 검사를 루프의 끝에서 수행하는 반복문이다.

따라서 조건의 참/거짓 여부와 관계없이 일단 코드 블록을 최소한 한 번 실행하는 것이 특징이다.

이후 조건이 참인 동안 반복이 계속된다.




<?php  
$i = 1;

do {
  echo $i++;
} while ($i < 6);
?>

문법은 이렇다.


변수 $i가 1부터 시작하여 5가 될 때까지 숫자를 출력하고 1씩 증가시키는 코드다.

최종적으로 브라우저에는 "12345"라는 문자열이 출력된다.




이전에 반복문 while문을 정리한 다음에 바로 이어서 정리했어야 했는데, 어쨌든 이제라도 정리한다.





foreach문


foreach문을 사용하면 배열Array의 값들을 간단하게 꺼내올 수 있다.




<?php
$members = ['mystee', 'Mohini', 'Senri'];

foreach ($members as $val) {
    echo $val.'<br>';
}
?>


mystee
Mohini
Senri

foreach문은 배열 안의 값들을 순차적으로 꺼내오다가 더 이상 가져올 값이 존재하지 않으면 자동으로 멈추는 반복문이다.

변수 $i에 숫자를 집어넣고, '몇'이 될 때까지 반복하라는 로직을 짤 필요가 없는 것이다.

위의 코드에서 변수 $val은 배열의 값을 할당하는 변수다.




<?php
$band = [
    'Guitar' => 'mystee',
    'Bass' => 'Mohini',
    'Drums' => 'Senri'
];

foreach($band as $position => $member) {
    echo $member . '는 밴드에서 ' . $position . '를 맡고 있습니다.<br>';
}
?>


mystee는 밴드에서 Guitar를 맡고 있습니다.
Mohini는 밴드에서 Bass를 맡고 있습니다.
Senri는 밴드에서 Drums를 맡고 있습니다.

연관 배열의 경우, 이와 같이 Key와 데이터에 변수명을 지정해서 Key 값도 출력할 수 있다.





<?php
    $list = scandir('./data');
    $list = array_diff($list, ['.', '..']);
    $list = array_values($list);

    $i = 0;
    while($i < count($list)){
        echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
        $i++;
    }
?>

마지막으로 이전 포스트의 마지막에 보여준 이 코드를 while문 대신 foreach문을 사용해서 리팩토링 해보겠다.




<?php
    $list = scandir('./data');
    $list = array_diff($list, ['.', '..']);

    foreach($list as $item){
        echo "<li><a href=\"index.php?id=$item\">$item</a></li>\n";
    }
?>

이전 코드와는 다르게 array_values() 함수를 사용하지 않았다.

foreach 문을 사용할 경우에는 array_values() 함수를 사용해서 인덱스 번호를 재정렬할 필요가 없다.

foreach 문은 인덱스에 의존하지 않고, 배열 내부에 실제로 존재하는 모든 요소를 순서대로 하나씩 꺼내어 순회하도록 설계되어 있기 때문이다.


따라서 배열에 '빠진' 인덱스가 있어도 에러가 발생하지 않으며, 이것이 php에서 배열 순회 시 foreach문 사용이 가장 권장되는 이유다.




다음 포스트

이 글이 도움이 됐거나 유익했다면 스크롤을 조금만 더 내려서 댓글을 남겨주세요. (비로그인도 가능합니다!)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊

지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.

댓글 쓰기

0 Comments

문의하기 양식