我在数据库中的数组如下所示:
$client[0]['Name'] = 'Foo';
$client[0]['Claim'][0]['year'] = 2013;
$client[0]['Claim'][1]['year'] = 2014;
$client[0]['Claim'][2]['year'] = 2015;
$client[1]['Name'] = 'Bar';
// no 2013!
$client[1]['Claim'][0]['year'] = 2014;
$client[1]['Claim'][1]['year'] = 2015;
// table headers are name, 2013, 2014, 2015...
foreach($client as $c) {
echo '<tr>';
echo '<td>' . $c['Client']['name'] . '</td>';
foreach($c['Claim'] as $claim) :
echo '<td>' . $claim['year'] . '</td>';
endforeach;
echo '</tr>';
}
除非$client
缺少一年,然后<td>
不平衡,否则其工作正常;导致我的桌子不正确。
我的目标是让每个$claim['Year']
与相应的表标题对齐。
我想我可以在每个数组中添加空键并重新排序,但这似乎有点不必要,并且想知道是否有更好的方法。
所以数组可能看起来像
这将是理想的:
$years[null, 2014, 2015]
而目前它是
$years[2014,2015]
希望这是有道理的。
答案 0 :(得分:0)
我假设你有一个开始和结束年份,你想要显示索赔。然后,如果你用这个替换内部for循环,我认为它应该工作:
$x = 0; //Variable to keep track of what claim we are on.
//Loop through the years.
for($i=$start; $i<=$stop; $i++) {
//If there is a claim for this year, echo it and move on to the next claim.
if($c['Claim'][$x]['year'] == $i) {
echo '<td>' . $c['Claim'][$x]['year'] . '</td>';
$x++;
}
//If not, just echo an empty table cell.
else {
echo '<td></td>';
}
}
仅当声明按年份排序时才有效。请注意,我还没有测试过代码。