使用PHP循环动态创建html表

时间:2015-02-26 23:00:00

标签: php html arrays loops

这是一个必须以表格格式呈现的PHP数组:

array:100 [▼
  "Brand #1" => array:3 [▼
  "2000" => "750.00"
  "2001" => "1750.00" 
  ..  
  ]
  "Brand #2" => array:3 [▼
    "2000" => "845.00"
    "2001" => "945.00"
    ..
  ]
  ..
  ..

表格应如下所示:

enter image description here

我一直在努力使用一堆PHP循环以表格格式呈现数组中的数据,但几个小时后我得出的结论是,无法生成像这样的表格。如上所示,没有将数组拆分为两个独立的数据源。

我是对的,还是有办法实现所需的输出?

修改

我认为有些用户没有得到问题的要点,因此这些匆匆投票。

我承认,我不够详细。

请注意,对于顶级数组中的每条记录,日期(从2000年到2004年)将重复100次。该表只有一组日期(第一列)。

因此,我想支持或谴责我的结论,即无法根据所提供的数据源生成此类表。

2 个答案:

答案 0 :(得分:4)

您的阵列格式并不理想,但我们会给它一个机会。 我们假设我们有以下数据:

$data = array(
    "Brand #1" => array(
        "2000" => "750.00",
        "2001" => "1750.00" 
  ),
    "Brand #2" => array(
        "2000" => "845.00",
        "2001" => "945.00",
        "2002" => "970.00"
  )
);

/* find all years */
$years = array();
foreach($data as $brand) {
    foreach($brand as $year => $value) {
        if(!in_array($year,$years)) $years[] = $year;
    }
}
sort($years);

我们现在拥有阵列$years中的所有独特年份。 每年循环一遍,在这样的循环中查找每个品牌的价值:

<table>
    <tr>
        <!-- generate table headers -->
        <th>Year</th>
        <?php foreach($data as $brand => $year): ?>
            <th><?php echo $brand; ?></th>
        <?php endforeach; ?>
    </tr>

    <!-- for each year create a new row in the table -->
    <?php foreach($years as $year): ?>
    <tr>
        <td><?php echo $year; ?></td>

        <!-- and for every brand we create a entry in the column -->
        <?php foreach($data as $brand): ?>
        <td><?php echo isset($brand[$year]) ? $brand[$year] : "";?></td>
        <?php endforeach; ?>
    </tr>
    <?php endforeach; ?>
</table>

如果这不符合您的要求,请清除,我会尝试回答。

答案 1 :(得分:1)

我无法得到多年的努力。我以为我会在这里发布我的解决方案,尽管它还没有完成。

echo "<table style='border: solid 1px black;'>";

$year = 2000;

echo "<tr>";
echo "  <th style='border: solid 1px black;'>";
echo "    Year";    

$show = 1;

// gives us brand 1, brand 2, brand 3, etc
foreach($array as $key => $value)
{

    echo "  <th style='border: solid 1px black;'>";
    echo $key;
    echo "    <table>";

    // gives years 2000, 2001, 2002, etc
    for ($i = 0; $i < count($array); $i++)
    {
        echo "<tr>";

        if($show)
        {

            echo "<td style='border: solid 1px black;'>";
            echo $year + $i;
            echo "</td>";

        }

        // gives the actual values 
        echo "<td style='border: solid 1px black;'>";
        echo $array[$key][$year+$i];
        echo "</td>";

    }

    $show = 0;

    echo "    </table>";
    echo "  </th>";


}