@frmax
человек

Как перебрать простой массив дней недели?

Добрый день,

сразу к вопросику) вопросом его сложно назвать и все же вызвал проблемы...

И так есть массив дней [1,2,3,4,5,6,7];
У меня стоит интервал с 3-2 т.е. получается включает все дни недели
Мне нужно перебрать массив c 3 по 2 значение, подскажите как сделать это без ифов) и макоронного кода)
for($i=1; $i<=7;$++){

}

естественно можно вымудрить но это не наш метод, случай то у меня не только 3-2)

нужно перебрать этот случай вот так 3-4-5-6-7-1-2
  • Вопрос задан
  • 550 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Совсем без if не получится наверно:
$n = 3;
$m = 2;
for ($i = $n; ; $i = ($i < 7 ? $i + 1 : 1)){
    echo $i . ' ';
    if ($i == $m) break;
}

https://ideone.com/ACJIjQ

Вот ещё такой вариант:
$n = 3;
$m = 2;

$i = $n - 1;
do {
	$d = $i % 7 + 1;
	echo $d . ' ';
	$i++;
} while ($d != $m);

https://ideone.com/1NKS0Q

И ещё:
$array = [1, 2, 3, 4, 5, 6, 7];
$n = 3;
$m = 2;

$i = array_search($n, $array);
$result = array_merge(array_slice($array, $i), array_slice($array, 0, $i));

https://ideone.com/g4ewhT
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
safenoob
@safenoob
С 3 по 2 это в обратном порядке что ли? Тогда:
$reversed = array_reverse($array);
for($i=4; $i<6; $i++){
 echo $reversed[$i];
}

<= нельзя ставить он у вас зациклиться в бесконечный цикл
Ответ написан
Settler1
@Settler1
Правильно написанный вопрос - половина ответа
Не совсем понял что вы хотите, но если
нужно перебрать массив c 3 по 2 значение

то просто в обратном порядке
for($i=3; $i>=2;$i--){
     echo "{$i}-";
}


или если
нужно перебрать этот случай вот так 3-4-5-6-7-1-2

то
foreach (array(3,4,5,6,7,1,2) as $i) {
     echo "{$i}-";
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы