1

我正在尝试构建一个循环结构,我知道最大循环数以及某些字段/输入的单独增量增加。考虑到这一点,我认为我应该追求嵌套的 for() 循环结构。

例如,假设回显的目标可能如下所示:

<table>
    <tr>
        <td><input id="1" secondaryId="1" ></td>
        <td><input id="2" secondaryId="1" ></td>
        <td><input id="3" secondaryId="1" ></td>
    </tr>
    <tr>
        <td><input id="4" secondaryId="2" ></td>
        <td><input id="5" secondaryId="2" ></td>
        <td><input id="6" secondaryId="2" ></td>
    </tr>
    <tr>
        <td><input id="7" secondaryId="3" ></td>
        <td><input id="8" secondaryId="3" ></td>
        <td><input id="9" secondaryId="3" ></td>
    </tr>
    <!-- etc -->
</table>

因此,此示例中的 id 在每个输入时增加一个,但在每三个输入后 secondaryId 都会增加。为了帮助进一步可视化,请考虑以下内容:

所需循环的示例表示

我在这一行尝试了一些代码:

<?php
echo"<table>";
for ($t=1;$t<4;$t++){
    echo"<tr>";
        for($y=1;$y<4;$y++){
            echo"<td><input id='$y' secondaryId='$t'></td>";
        }
    echo"</tr>";
}
echo"</table>";
?>

很明显它不起作用,而是回显:

表示当前循环中正在发生的事情的示例

我明白为什么会出现问题,因为在父循环的每次迭代(正确的词?)中,$y变量都会重置回 1。

如何操纵循环以便$y在整个循环中递增?是否有我应该考虑的 foreach 组合?

另外,假设上面的“ id”和“ secondaryId”类型属性是固定的,不能更改。

我已经考虑过在 excel 的帮助下手动创建输入字段的最后手段,但这似乎很费力,并且考虑到我想要构建的输入字段是50 行( <tr>) x 23 列( <td>) ,这似乎会带来调试问题


> 更新:

我接受了 Fabio 的回答,因为它确实有效,我希望我也能接受 Maiden B. 的回答,因为这让我在一个循环中创建了一个数学解决方案。

我最终将使用的代码是:

$m = 0;
echo"<table>";
    for($y=1;$y<4;$y++){
        echo"<tr><td>
        <input id='".(1 + ($m*3))."' secondaryId='$y' >
        <input id='".(2 + ($m*3))."' secondaryId='$y' >
        <input id='".(3 + ($m*3))."' secondaryId='$y' >
        </td></tr>";
        $m++;
    }
echo"</table>";

4

4 回答 4

0

对于“回显目标”,仅使用 1 个 for 循环可能就足够了。您的“id”属性将包含迭代变量$i,您的“secondaryId”属性将包含($i div 3) + 1

for ($i=1; $i <= $max; $i++) {
    printf('<td><input id="%d" secondaryId="%d" ></td>', $i, ($i/3)+1);
}

关键是只增加一个变量($i),并且只有当 $i 超过某些限制(在这种情况下每 3 步)时才让另一个值增加。

整个代码看起来像这样:

<table>
    <tr>
    <?php
        for ($i=1; $i <= $max; $i++) {
            printf('<td><input id="%d" secondaryId="%d" ></td>', $i, ($i/3)+1);
            if ($i % 3 == 0) { // boundary reached
                echo "</tr><tr>";
        }
    </tr>
</table>

我希望你明白这一点。

于 2013-06-08T11:24:47.753 回答
0

我认为您只需要使用其他变量即可根据您的需要计算您的循环

$m = 1;
$l = 1;
echo"<table>";
for ($t=1;$t<4;$t++){
    echo"<tr>";
        for($y=1;$y<4;$y++){
            echo"<td><input id='$m' secondaryId='$l'></td>";
            $m++; //we increment here for ipunt id
        }
            $l++; //we increment here for secondaryId
    echo"</tr>";
}
echo"</table>";

这将输出

<table>
  <tr>
    <td><input id='1' secondaryId='1'></td>
    <td><input id='2' secondaryId='1'></td>
    <td><input id='3' secondaryId='1'></td>
  </tr>
  <tr>
    <td><input id='4' secondaryId='2'></td>
    <td><input id='5' secondaryId='2'></td>
    <td><input id='6' secondaryId='2'></td>
  </tr>
  <tr>
    <td><input id='7' secondaryId='3'></td>
    <td><input id='8' secondaryId='3'></td>
    <td><input id='9' secondaryId='3'></td>
  </tr>
</table>
于 2013-06-08T11:30:51.390 回答
0

你应该试试这个:-

<?php
echo"<table>";
$ids = 1;
for ($t=1;$t<4;$t++)
{
    echo"<tr>";
    for($y=1;$y<4;$y++)
    {
        echo"<td><input id='$ids' secondaryId='$t'></td>";
        $ids++;
    }
    echo"</tr>";
}
echo"</table>";
?>
于 2013-06-08T11:33:02.983 回答
0

您无需重置第一个输入 ID。例如

echo"<table>";
$inputId = 1;
for ($t=1;$t<4;$t++){
    echo"<tr>";
    for($y=1;$y<4;$y++){
        echo"<td><input id='$inputId' secondaryId='$y'></td>";
        $inputId++;
    }
    echo"</tr>";
}
echo"</table>";
于 2013-06-08T11:34:48.193 回答