这就是我的数组的样子。
(int) Year 1 => array(
'Department 1' => array(
'Sales' => '12345'
),
'Department 2' => array(
'Sales' => '12345'
),
),
(int) Year 2 => array(
'Department 1' => array(
'Sales' => '12345'
),
'Department 2' => array(
'Sales' => '12345'
),
)
我希望能够创建一个表格,其中标题是X轴上的年份。 Y轴需要以部门名称开头。相邻的单元格需要在一个单元格中具有销售额,收入和总额。
看起来应该是这样......
Department____| ___YEAR1_______ | __Year2
Department 1 |Sales [dept 1][year 1] | Sales[dept 1][year 2]
Department 2 |Sales [dept 2][year 1] | Sales [dept 2][year 2]
我使用嵌套的foreach循环
foreach($List as $key=>$row) {
echo "<tr><td>".$key."</td>";
foreach($row as $key2=>$col){
echo "<td>" . 'Sales: '.round($col['sales'],2) ."</td>";
}
echo "</tr>";
}
echo "</table>"; ?>
但它打印的表格的部门名称位于x轴顶部,年份位于y轴。如何在x轴上获得年份,在y轴上获得部门。
答案 0 :(得分:0)
问题是数组的维度与您希望为表格迭代它们的顺序不一致。您需要显式提取密钥以在嵌套循环中迭代它们。
$years = array_keys($List);
// Print column headings
echo "<table><thead><tr><th>Department</th>";
foreach ($years as $year) {
echo "<th>$year</th>";
}
echo "</tr></thead>";
// Print data rows
echo "<tbody>"
foreach (array_keys($List[$years[0]]) as $dept) {
echo "<tr><th>$dept</th>";
foreach ($years as $year) {
echo "<td>{$List[$year][$dept]['Sales'}]</td>";
}
echo "</tr>";
}
echo "</tbody></table>";
正如我所提到的,这取决于所有年份都拥有相同的部门。如果随着时间的推移添加新部门,它将无法工作。您可以使用array_reduce
合并所有部门列表来解决此问题,我会将其留作读者练习。