数组的循环问题

时间:2017-12-28 13:57:27

标签: php html arrays loops

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

输出结果 enter image description here 我的预期结果 enter image description here

  1. 31栏表示为天。
  2. 我将数量和天数存储在一起,然后将其提取出来 一个清单。
  3. 之后,我想将它与day column进行比较并显示qty值 对于专栏。
  4. 我该怎么做?我的逻辑错了吗?

3 个答案:

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

?>