0

我正在做一个有 80 个编号问题的测验。在每 4 个问题之后,将有一个未编号的第 5 个奖励问题。这 100 个问题在数据库表中具有索引号 (1-100)。可能对奖金问题使用单独的表格更合乎逻辑,但客户希望按该顺序将问题放在一个表格中。

我不想在测验界面中显示红利问题索引号,因此我需要跳过 100 个问题范围内的每 5 个索引号。

我确实设法进行了一个简单的计算,当我在循环中检查它时效果很好,但不知何故我觉得这是一个相当肮脏的解决方案(ceil)。有没有办法以更简洁或更合乎逻辑的方式编写此代码?

动作脚本:

for (var i:Number = 1; i < 101; i++) {
    var displayIndex:Number = Math.ceil((i/5) * 4);
    trace("i:" + i + " / " + displayIndex);
}

PHP:

for ($i = 1; $i < 101; $i++) {
    echo "i: " . $i . " / displayIndex: " . (ceil(($i/5) * 4) . "<br>");
}

编辑: 让我试着想象一下

index-number =  1 -> display-number =  1
index-number =  2 -> display-number =  2
index-number =  3 -> display-number =  3
index-number =  4 -> display-number =  4
index-number =  5 -> display-number =  none
index-number =  6 -> display-number =  5
index-number =  7 -> display-number =  6
index-number =  8 -> display-number =  7
index-number =  9 -> display-number =  8
index-number = 10 -> display-number =  none
etc...
4

2 回答 2

1

你的任务足够奇特,你的决定可能足够公平以完成它。它已经足够简化了,但是除了你之外没有人会理解它。

我建议只添加评论。但是,还有很多其他方式,我不能说它们更优雅,但也许更不言自明。

$counter = 1;
for ($i = 1; $i < 21; $i++) {
    $displayNum = $counter;
    if ($i % 5 == 0) {
        $counter--;
        $displayNum = "none";
    }
    echo "index-number = $i -> display-number = $displayNum <br/>";
    $counter++;
}

将导致:

index-number = 1 -> display-number = 1 
index-number = 2 -> display-number = 2 
index-number = 3 -> display-number = 3 
index-number = 4 -> display-number = 4 
index-number = 5 -> display-number = none 
index-number = 6 -> display-number = 5 
index-number = 7 -> display-number = 6 
index-number = 8 -> display-number = 7 
index-number = 9 -> display-number = 8 
index-number = 10 -> display-number = none 
index-number = 11 -> display-number = 9 
index-number = 12 -> display-number = 10 
index-number = 13 -> display-number = 11 
index-number = 14 -> display-number = 12 
index-number = 15 -> display-number = none 
index-number = 16 -> display-number = 13 
index-number = 17 -> display-number = 14 
index-number = 18 -> display-number = 15 
index-number = 19 -> display-number = 16 
index-number = 20 -> display-number = none 

如果您尝试使用三元运算符来缩小它,您最终会得到与您的代码一样的代码,它是 crypt 的,而不是解释性的。

您可以跳过迭代continue并在此之前添加所需的输出。可以通过以下方式实现相同的结果:

$counter = 1;
for ($i = 1; $i < 21; $i++) {
    if ($i % 5 == 0) {
        echo "index-number = $i -> display-number = none <br/>";
        continue; // more explanatory for SKIP THIS ITERATION
    }
    echo "index-number = $i -> display-number = $counter <br/>";
    $counter++;
}

这样您将打印none并跳过迭代的执行,因此$counter不会增加,并且在第 6 次迭代中它将是 5。

于 2014-07-10T13:21:30.143 回答
1

尝试

if($i % 5 != 0) {
  // do your stuff
}
else {
  // skipped
}

根据预期输出:-

for ($i = 1; $i < 101; $i++) {
    echo 'index-number = '. $i.' -> display-number ='. (($i % 5 != 0) ? $i : 'none').'<br>';  
}

输出 :-

index-number = 1 -> display-number =1
index-number = 2 -> display-number =2
index-number = 3 -> display-number =3
index-number = 4 -> display-number =4
index-number = 5 -> display-number =none
index-number = 6 -> display-number =6
index-number = 7 -> display-number =7
index-number = 8 -> display-number =8
index-number = 9 -> display-number =9
index-number = 10 -> display-number =none
and so on....
于 2014-07-10T12:16:20.630 回答