数字之间的循环循环(范围)

时间:2017-12-14 13:21:33

标签: php algorithm numbers cycle

我有一系列数字,例如(日历日): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

我希望在两个之后突出显示每三个数字。

所以看起来应该是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 < / strong> 18 19 20 21 22 23 24 25 26 27 28 29 30 31

或者它可以是两个之后,或两个之后或任何其他对之后的两个。

我需要一些算法来完成这项工作,请帮忙。

3 个答案:

答案 0 :(得分:3)

您可以使用模%。如果modulo小于或等于2(0,1,2)则高亮显示它。

$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31);

    foreach( $arr as $key => $value ) {
        if ( ( $key % 5 ) <= 2 ) echo "<b>" . $value  . "</b>"; 
        else echo $value; 

        echo "<br />";
    }

答案 1 :(得分:0)

您可以在for循环中使用mod上的简单$i来实现此目的:

for ($i = 0; $i < 31; $i++) {
    if ($i%5 == 1 || $i%5 == 2 || $i%5 == 3 ) {
        echo "<strong>" . $i . "</strong>";
    } else {
        echo $i;
    }
}

需要稍微调整一下输出你需要输出的方式,但一般的逻辑应该有效。

点击此处查看工作示例https://ideone.com/bpgdgm

答案 2 :(得分:0)

以下是使用array_sliceimplode构建字符串的一种方法。

这会减少循环次数。多少个循环取决于“设置” 在这种情况下,当你循环数组的每个值时,你提到它会产生七个循环而不是31循环。

$days = range(1,31);
$i = 3; // consecutive bolded days
$j = 2; // consecutive not bolded days between the bolded
$str ="";
for($k=0;$k<end($days);){
    $str .= "<b>" . implode("</b> <b>", array_slice($days, $k,$i)) ."</b> " . implode(" ", array_slice($days, $k+$i, $j)). " ";
    $k=$k+$i+$j;
}
echo $str;

https://3v4l.org/CpoVb

Array_slice首先捕获应该加粗的值,然后捕获不应该加粗的值,直到下一个“粗体”值并将其存储在$ str中。