<?php
?>
<html>
<head>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>
</th>
<?php
for($i = 1; $i <=31;$i++){
echo '<th>'.$i.'</th>';
}
?>
</tr>
</thead>
<tbody>
<td>
Item A
</td>
<?php
$qty_n_day = '1/2,3/6';
$qty_day = explode(',', $qty_n_day);
foreach ($qty_day as $qd) {
list($qty,$day) = explode('/', $qd);
for($i = 1; $i <=31;$i++){
if($day == $i)
echo '<td>'.$qty.'</td>';
else
echo '<td>-</td>';
}
}
?>
</tbody>
</table>
</body>
</html>
我该怎么做?我的逻辑错了吗?
答案 0 :(得分:3)
尝试这种方式,首先使用日期和值创建关联数组:
addRemoveUnderline(5);
function addRemoveUnderline(navIndexNumber){
console.log(navIndexNumber + " is index number");
// remove selected class to main menu
$('header a div').removeClass( "nav-selected");
// add selected class to main menu
$('header li:nth-child(navIndexNumber) div').addClass("nav-selected");
}
答案 1 :(得分:1)
您必须更改循环的顺序:
您的foreach
循环遍历数量并包含for
循环,循环遍历这些日期。这导致行为,for
循环完全贯穿每个数量,因此回显31天。
这意味着,对于2个数量,打印62天。
您需要翻转循环并向其添加条件输出:
for ($i = 1; $i <= 31; $i++) {
$quantity = '-';
foreach ($qty_day as $qd) {
list($qty,$day) = explode('/', $qd);
if ($day == $i) {
$quantity = $qty;
break;
}
}
echo '<td>' . $quantity . '</td>';
}
答案 2 :(得分:1)
问题来自于您正在执行两次迭代,第一次处理2
个周期,第二次处理31
个周期...总计62
个元素正在生成。
我建议你一个更紧凑的解决方案,首先构建最终的数组,然后简单地打印它:
<?php
$arr = array_fill(1, 31, "-");
$qty_n_day = '1/2,3/6';
$qty_day = explode(',', $qty_n_day);
foreach ($qty_day as $qd)
{
list($qty,$day) = explode('/', $qd);
$arr[$day] = $qty;
}
for ($i = 1; $i <= 31; ++$i)
{
echo '<td>'.$arr[$i].'</td>';
}
?>