Можно ли сделать это? (вот мой код)
for ($i = 0 ; $i <= 10 ; $i++){ for ($j = 10 ; $j >= 0 ; $j--){ echo "Var " . $i . " is " . $k . "<br>"; } }
Я хочу что-то вроде этого:
var 0 – 10
var 1 – 9
var 2 – 8 …
Но мой код неправильный, он дает огромный список. Php гуру, помогите мне!
Попробуй это:
for ($i=0, $k=10; $i<=10 ; $i++, $k--) { echo "Var " . $i . " is " . $k . "<br>"; }
Две переменные $i
и $k
инициализируются соответственно 0
и 10
. В конце каждого цикла $i
будет увеличиваться на один ( $i++
) и $k
уменьшенный на один ( $k--
). Таким образом, $i
будет иметь значения 0, 1, …, 10 и $k
значения 10, 9, …, 0.
Вы не должны использовать два for-loops для того, чего бы вы хотели достичь, поскольку вы зацикливаете 121 раз всего (11×11). То, что вы действительно хотите, это просто иметь счетчик, объявленный вне цикла, который отслеживает j, а затем уменьшает j внутри цикла.
Редактировать: Спасибо Gumbo за то, что он поймал включение для меня.
Если, как выглядит ваш код, у вас есть два значения, которые работают в противоположном направлении, вы можете просто вычесть:
echo "Var " . $i . " is " . 10 - $i . "<br>";
Но я думаю, это не то, чего вы хотите? Кроме того, будьте осторожны с предлагаемым оператором запятой . Хотя это хорошо, это может вызвать непослушные побочные эффекты на других языках, таких как C и C ++, поскольку PHP реализует его по-разному.
Вы также можете добавить условие для второй переменной
for ($i=0, $k=10; $i<=10, $k>=0 ; $i++, $k--) { echo "Var " . $i . " is " . $k . "<br>"; }
Чтобы расширить другие (правильные) ответы, то, что вы делаете, называется петлями вложенности . Это означает, что для каждой итерации внешнего цикла (первого) вы завершаете весь внутренний цикл. Это означает, что вместо 11 выходов вы получаете 11 + 11 + 11 + ... = 11 * 11
выходов
array_map(function($i) { echo "Var {$i} is ".(10-$i)."<br/>".PHP_EOL; }, range(1,10));
Я попытался получить время начала и окончания и сохранить в базе данных, учитывая время начала и окончания, каждый цикл выполняется циклически, используя две переменные i & j
$start = "09:00"; $end = "18:00"; $strEnTim = strtotime("10.00"); $slotStart = strtotime($start); $slotEnd = strtotime($end); $slotNow = $slotStart; for( $i=$slotStart, $j=$strEnTim; $i, $j<=$slotEnd; $i+=3600, $j+=3600) { if(( $i < $slotNow) && ( $j < $strEnTim)) continue; Slot::create([ 'start_time' => date("H:i",$i), 'end_time' => date("H:i", $j) ]); }