3维关联数组到HTML表

时间:2013-10-25 18:46:10

标签: php html multidimensional-array html-table

这就是我的数组的样子。

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

1 个答案:

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