这是一个必须以表格格式呈现的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次。该表只有一组日期(第一列)。
因此,我想支持或谴责我的结论,即无法根据所提供的数据源生成此类表。
答案 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>";
}