Цикл цикла между числами (диапазон)

У меня есть массив чисел, например (календарных дней):
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 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Или это может быть два после двух, или четыре после двух, или любая другая пара.

Мне нужен алгоритм, чтобы это сработало, помогите пожалуйста.

1

Решение

Вы можете использовать по модулю %, Если по модулю меньше или равно 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 />";
}
3

Другие решения

Вы можете достичь этого с помощью простого 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

0

Вот один метод, использующий array_slice а также взрываться построить строку.

Это делает меньше петель. Сколько петель зависит от «настроек».
В этом случае вы упоминаете, что он делает семь циклов по сравнению с 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.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector