0

这就是我的数组的样子。

(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 轴上获得部门。

4

1 回答 1

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合并所有部门列表来解决此问题,我将把它作为练习留给读者。

于 2013-10-25T18:56:40.057 回答