php 입문- table 자료 구조
php는 굉장히 직관적이고 합리적이다. 여러 자료형이 있고, 어디서 많이 본 듯한 구조들과 단순한 구성으로 앵간한 자료형은 기초만 알면 생각하는 대로 다 쓸 수 있다.
php table 자료 구조는 크게 3가지 계층으로 나뉜다. table 전체를 이루는 table, 한 행을 이루는 row, 한 행에서의 한 칸 또는 데이터를 담당하는 dt가 있다. 행과 열을 이용한 구조가 아니지만, 한 데이터 뭉치가 행을 이루고, 여러 행이 모여 한 테이블을 이룬다는 사실은 자명하고, 어렵지 않게 사용할 수 있다.
가장 대표적인 예시인, 달력을 만들어 가면서 한 번 제대로 배워보자.
PHP
<table> // table을 앞으로 만들겠다고 선언하는 태그이다. 이 태그를 닫을 때까지의 내용물(행)은 이 태이블에 포함된다. border, width 등등의 속성도 바꿀 수 있다.
<tr> // table을 만든 후, 행을 만들겠다는 태그이다. 이 행 역시 닫을 때까지 이후의 데이터들은 모두 이 행에 포함된다. ( tmi : 행을 영타로 치면 god이다. 신기할 따름이다.)
<td> // 이 자료 구조의 최소 단위인 data를 만들고 앞으로 닫을 때까지의 내용물을 데이타에 담겠다는 의미이다.
test // 이게 그 내용물
</td>// 그리고 모든 태그는 이렇게 슬래시를 앞에 붙혀 태그를 닫는다. 하나의 태그에는 꼭 하나의 닫는 태그가 필요하다
<td> test </td> // 똑같은 데이터를 여러개 만들자
<td> test </td>
<td> test </td>
<td> test </td>
<td> test </td>
</tr> // 그리고 모든 태그는 이렇게 슬래시를 앞에 붙혀 태그를 닫는다. 행 또한 마찬가지다
<tr> // 행을 닫았으니, 새로운 행을 또 열어주자
<td> test </td>
<td> test </td>
<td> test </td>
<td> test </td>
<td> test </td>
<td> test </td>. 당연히 while, for문 등을 이용해서 10번 반복하는게 정신건강에 이롭다
</tr>
</table> // 드디어 테이블을 닫는다. 이걸로 우리는 이쁜 테이블 하나를 완성했다. test로 가득 찬 2행짜리 table이다.
<table border = "1"> // 이번에는 조건문과 반복문들을 이용해서 테이블을 만들어보자. 이번엔 태두리도 넣어봤다.
<?php
for ($i = 1; $i <=10; $i++) echo "<td width='20px'> $i </td>" ; // 1부터 10까지를 반복문을 통해 데이타로 만들었다.
?>
</tr> //tr을 처음에 따로 선언해주지 않았지만, 어짜피 1행짜리기 떄문에 괜찮다.
</table>PHP
<?php
$now = "2025-09-01";
$nowdate = strtotime($now);
echo date("t", $nowdate) ;
echo date("w",$nowdate);
$start = date("w",$nowdate);
$end = date("t", $nowdate) ;
?>
//php의 timestamp를 이용해 본격적인 캘린더를 만들어보자. now 변수에 정석적 형태의 날짜를 저장하고 timestamp를 이용해 날짜를 쉽게 인덱싱하게끔 합자
<table border = "1">
<tr>
<td> 일 </td>
<td> 월 </td>
<td> 화 </td>
<td> 수 </td>
<td> 목 </td>
<td> 금 </td>
<td> 토 </td>
</tr>
//날짜부터 써줍시다
<?php
echo "<tr>" ;
for($i=0;$i<$start;$i++) {
echo "<td> </td>" ;
}
//꼭 월요일은 아닌 1일부터 시작하기에, 행을 맞춰주기 위한 공백 데이터를 넣어주어야 한다.
$col = $start ;
for($i=1;$i<=$end;$i++){
echo "<td> $i </td>" ;
$col++ ;
if ($col % 7 === 0){
echo "</tr> <tr>" ;
}
}
while ($col%7 !==0 ){
echo "<td></td>" ;
$col++;
}
?>
//조건문이다. 7번마다 줄바꿈을 통해 새로운 행으로 이동하고, 캘린더의 형식에 맞춰 날짜를 채워주자
</tr> </table>
<br>
<?php
function show_calander($date){
// // 어떤 달의 캘린더를 보여주는 달력을 이번에는 함수로 만들어보자. php의 테이블 메소드를 이용하여 달력을 출력해보자.
$now = $date;
$nowdate = strtotime($now); // strtotime, xxxx-xx-xx
$start = date("w",$nowdate);
$end = date("t", $nowdate) ;
echo $date; //편의상 캘린더를 출력하기 위한 날짜도 출력해보자.
echo '<table border = "1">';
echo '<tr>';
echo '<td> 일 </td>';
echo '<td> 월 </td>';
echo '<td> 화 </td>';
echo '<td> 수 </td>';
echo '<td> 목 </td>';
echo '<td> 금 </td>';
echo '<td> 토 </td>';
echo '</tr>';
echo "<tr>" ;
for($i=0;$i<$start;$i++) {
echo "<td> </td>" ;
}
$col = $start ;
for($i=1;$i<=$end;$i++){
echo "<td> $i </td>" ;
$col++ ;
if ($col % 7 === 0){
echo "</tr> <tr>" ;
}
}
while ($col%7 !==0 ){
echo "<td></td>" ;
$col++;
}
echo "</tr> </table> ";
}
?>
//아까 예제에서 만든 걸 날짜만 입력하면 되게끔 일반화하여 함수로 만들었다.
<br>
<php
show_calander("1997-6-16");
?>
// 그대로 복사해서 실행해 보자. 함수가 정의된 대로, 1997년 6월의 달력이 출력될 거다.