我是开发中的新手,因此遇到以下逻辑问题。
这是我的示例数据库。
$data = array(3) {
$x_count = 2;
[1] => $name = 'A';
$y_count = 2;
array(2) {
[1] => $name = 'A.1';
$z_count = 2;
array(2) {
[1] => $name = 'A.1.a';
$val = 1;
[2] => $name = 'A.1.b';
$val = 1;
}
[2] => $name = 'A.2';
$z_count = 2;
array(2) {
[1] => $name = 'A.2.a';
$val = 2;
[2] => $name = 'A.2.b';
$val = 2;
}
}
[2] => $name = 'B';
$y_count = 2;
array(2) {
[1] => $name = 'B.1';
$z_count = 2;
array(2) {
[1] => $name = 'B.1.a';
$val = 3;
[2] => $name = 'B.1.b';
$val = 3;
}
[2] => $name = 'A.2';
$z_count = 2;
array(2) {
[1] => $name = 'B.2.a';
$val = 4;
[2] => $name = 'B.2.b';
$val = 4;
}
}
}
我不知道使用foreach循环将数据打印到此表中,或为x,y,z标题中的每个标题计算“ colspan”数。
我真的希望能收到一些建议。非常感谢!
编辑:x_count,y_count和z_count是从DB获取的变量,并且不仅是2。EDIT2:我的预期结果如下所示:
<table>
<tr>
<th>x_name</th>
<td colspan = "7">A</td>
<td colspan = "7">B</td>
<th rowspan = "3">SUM</th>
</tr>
<tr>
<th>y_name</th>
<td colspan = "3">A.1</td>
<td colspan = "3">A.2</td>
<td rowspan = "2">SUM</td>
<td colspan = "3">B.1</td>
<td colspan = "3">B.2</td>
<td rowspan = "2">SUM</td>
</tr>
<tr>
<th>z_name</th>
<td>A.1.a</td>
<td>A.1.b</td>
<td>SUM</td>
<td>A.2.a</td>
<td>A.2.b</td>
<td>SUM</td>
<td>B.1.a</td>
<td>B.1.b</td>
<td>SUM</td>
<td>B.2.a</td>
<td>B.2.b</td>
<td>SUM</td>
</tr>
<tr>
<th>value</th>
<td>1</td>
<td>1</td>
<td>2</td>
<td>2</td>
<td>2</td>
<td>4</td>
<td>6</td>
<td>3</td>
<td>3</td>
<td>6</td>
<td>4</td>
<td>4</td>
<td>8</td>
<td>14</td>
<td>20</td>
</tr>
</table>
您不需要添加y_count,x_count,可以count()
在对象上使用function $data
。
这是我创建的HTML结构,您可以看一下
为了便于处理数据,您可以考虑在下面使用我的数据结构
$data = [
[
"name" => 'A', // x_name
"children" => [
[
"name" => 'A.1', // y_name
"children" => [
[
"name" => 'A.1.a', // z_name
"value" => 1
],
]
]
]
],
...
];
注意:以下所有代码逻辑均用于您提供的HTML,而不是我的jsFiddle的HTML
第一步:在数组$ data的每个元素上运行循环以处理x_name
数据。将每行的html分配给变量以供进一步使用
/* Init html variable for $x_name, $y_name, $z_name, $value */
$x_html = '';
$y_html = '';
$z_html = '';
$value_html = '';
foreach ($data as $x_index => $x_data) {
$x_children = $x_data['children'];
$x_colspan = 1; // this variable will be sum of 1 'SUM' column and each $y_colspan
foreach ($x_children as $y_index => $y_data) {
$y_children = $x_data['children'];
$y_colspan = count($y_children) + 1; // all of y's children column + SUM column
// Update x_colspan
$x_colspan += $y_colspan;
// process assign html to $y_html
$y_html .= '<td colspan = "'.$y_colspan.'">'.$y_data['name'].'</td>';
// add SUM column
if ($y_index == count($x_children)-1) {
$y_html .= '<td>SUM</td>';
}
$sum = 0;
foreach ($y_children as $z_index => $z_data) {
$z_value = $z_data['value'];
$z_html .= '<td>'.$z_data['name'].'</td>';
// add SUM column for every looped 2 $z_data column
if ($z_index == count($y_children)-1) {
$z_html .= '<td>SUM</td>';
}
$sum += $z_value; // sum all value of current y_children
$value_html .= '<td>'.$z_data['value'].'</td>';
}
// After finish assign z_html, value_html, sum it all
$value_html .= '<td>'.$sum.'</td>'
}
$x_html .= '<td colspan = "'.$x_colspan.'">'.$x_data['name'].'</td>';
}
最后一步:您打印出所有变量x_html,y_html,z_html,value_html。与实际的表格html合并
$table_html = '
<table>
<tr>
<th>x_name</th>
'.$x_html.'
<th rowspan = "3">SUM</th>
</tr>
<tr>
<th>y_name</th>
'.$y_html.'
</tr>
<tr>
<th>z_name</th>
'.$z_html.'
</tr>
<tr>
<th>z_name</th>
'.$value_html.'
</tr>
</table>
';
上面的代码可能无法运行,只是一个想法。希望对您有帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句