将日期输出到表中,按顺序填充缺少日期的表

时间:2015-10-05 13:40:19

标签: php arrays date logic html-table

我在数据库中的数组如下所示:

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

希望这是有道理的。

1 个答案:

答案 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>';
    }
}

仅当声明按年份排序时才有效。请注意,我还没有测试过代码。