【问题标题】:Create an html table dynamically with PHP loops [closed]使用 PHP 循环动态创建 html 表 [关闭]
【发布时间】:2015-02-26 23:00:00
【问题描述】:

这是一个必须以表格格式显示的 PHP 数组:

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

表格应如下所示:

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

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

编辑:

我认为一些用户没有得到问题的要点,因此这些仓促的否决票。

我承认,我不够详细。

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

因此,我想支持或反驳我的结论,即无法从提供的数据源原样生成这样的表。

【问题讨论】:

  • 到目前为止您尝试过什么?你的代码在哪里?对我来说最简单的解决方案是构建多维数组,其中第一个键是年份,第二个品牌 $arr[$year][$brandName] = $val
  • 总有办法的。如果您可以控制 PHP 数组,那么我会按照您想要的方式在多维数组中组织数据。然后你的输出可以遍历每一行并显示它。
  • 如果你有一个数据库(mysql),你可以把你的信息放进去,然后创建一个while循环调用行数组。
  • (不是反对者,但我怀疑这些 DV 是因为您没有提供代码尝试,有些人可能(错误地)认为您没有编写任何代码。我认为这是个好主意提供您现有的代码,因为它是工作解决方案的一个更容易的起点,并且简洁地显示了您对问题的看法)。

标签: php html arrays loops


【解决方案1】:

您的数组格式并不理想,但我们会试一试。 假设我们有以下数据:

$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>

如果这不符合您的要求,请澄清,我会尽力回答。

【讨论】:

  • 做得很好。在找到所有年份后,可能想在其中扔一个sort($years);,以防第 1 年可能不是最低的年份。
  • @CBroe 感谢您的建议 - 已更新。
  • @msfoster,我刚刚测试了你的代码。完美运行!感谢您花时间进行设置。
【解决方案2】:

我无法度过这些年。以为我会在这里发布我的解决方案,即使它不完整。

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>";


}

【讨论】:

  • 您正在表中创建表。
猜你喜欢
  • 2021-10-23
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 2014-05-20
  • 1970-01-01
相关资源
最近更新 更多