배열을 테이블로 만들 필요가 생겨 작성했습니다.
rowspan을 적용한 테이블로 만드는 소스 입니다.
만약 아래와 같은 배열이 있다면
$arr = [
'a' => [
'b' => 1,
'c' => 1
],
];
아래와 같은 테이블로 만듭니다.
<table>
<tr>
<td rowspan="2">a</td><td>b</td><td>1</td>
</tr>
<tr>
<td>c</td><td>1</td>
</tr>
</table>
class Maketable
{
protected $CI;
public function __construct()
{
$this->CI =& get_instance();
}
public function make_table($data, $convert_fg = true)
{
$str = '';
foreach ($data as $key => $value) {
$this->make_tr($key, $value, $convert_fg, $str);
}
return $str;
}
public function cnt_depth($data, &$cnt = 0)
{
if (is_array($data)) {
foreach ($data as $value) {
$this->cnt_depth($value, $cnt);
}
} else {
$cnt++;
}
return $cnt;
}
public function make_tr($key, $data, $convert_fg, &$str = '', &$first = false)
{
if (is_array($data)) {
$head_tr = ($first === true) ? '' : '<TR>';
$rowspan = $this->cnt_depth($data);
$key_str = ($convert_fg === true) ? $this->CI->lang->line($key) : $key;
$str .= $head_tr . "<TD rowspan=\"{$rowspan}\">{$key_str}</TD>";
$first = true;
foreach ($data as $key => $value) {
$this->make_tr($key, $value, $convert_fg, $str, $first);
}
$str .= "</TR>";
} else {
$head_tr = ($first === true) ? '' : '<TR>';
$first = false;
$key_str = ($convert_fg === true) ? $this->CI->lang->line($key) : $key;
$str .= $head_tr . "<TD>{$key_str}</TD><TD>{$data}</TD></TR>";
}
return $str;
}
}