Чат Telegram
Группа ВКонтакте
Новый комментарий


SBTesla
<?php

$num = 344;
while ($num <= 357) {
    if ($num % 2 == 0) {
        $arr[] = $num;
    }
    $num++;
}

foreach ($arr as $key => $value) {
    echo $value;
    echo "<br>";
}
<?php
/*Выводим все сотые  числа*/
$num = 0;
while ($num < 1000) {
    if ($num) {
        $arr[] = $num;
    }
    $num+= 100;
}

foreach ($arr as $key => $value) {
    echo $value;
    echo "<br>";
}
ivashkevich
  1. Если входные условия поменяются, и нужно будет найти все чётные числа от 344, то число 344 будет пропущено, а проверяться сразу будет 345. Аналогично с верхней границей, если было бы 358, то оно тоже было бы пропущено. Переделайте алгоритм так, чтобы граничные значения тоже учитывались.
  2. Так неправильно:
    if ($i % 2) { } 
    else { $arr[] = $i;}

    Правильно вот так:

    if ($i % 2 === 0) {
        $arr[] = $i;
    }

    Во-первых, ни в коем случае не должно быть пустых блоков. Можно инвертировать условия с помощью логического НЕ (оператор !). То есть не писать:

    if ($x) {
        //это мне ни к чему
    } else {
        //а вот здесь я что-то сделаю
    }

    А писать:

    if (!$x) {
        //здесь я что-то сделаю
    }

    Здесь вы посмотрели, что если $i делится на 2 с остатком (остаток - 1, будет преобразовано в true), то это не то что вам нужно. И добавили else и его уже обработали.
    Хотя можно было сделать просто подходящее условие - если остаток от деления на 2 равен 0.

  3. Блоки if всегда нужно писать в виде:
    if (условие) {
        //то
    }

    Никаких в одну строку и прочих лишних переносов.

  4. Один отступ всегда должен быть равен четырем пробелам. А у вас echo пляшут как хотят. Используйте автоформатирование в PHPStorm - одновременное нажатие CTRL+ALT+L

Поправьте эти небольшие недочёты и попробуйте снова.

alex.evg.ostr

В 1. Нет, 344 также попадет под условия и будет внесено в массив. Также, если у величить сравнение с 358, то значение 358 тоже будет внесено и выведено.

trialex3
<?php
$arr = [];
$x = 345;
while ($x <= 357) {
    if ($x % 2 == 0) {
        $arr[] = $x;
    }
    $x++;
}

foreach ($arr as $value) {
    echo $value . ', ';
}
?>
ivashkevich

Всё верно, образцовая работа.

Watcher

$arr = [];
можно опустить
тоже работает )))

ivashkevich

Можно, но лучше писать, так более очевидно.

WarLikeLaux

https://pp.userapi.com/c824504/v824504838/1c106/WB8KDf9xzn0.jpg

ivashkevich

Всё хорошо, но код лучше оформлять текстом, как я вам и говорил. С помощью markdown-разметки:
```
код
```

Закрывающий тег ?> в конце не нужен.

serb2017
<?php

$i = 346;
$i1 = 357;

if ($i % 2 !== 0) {$i=$i+1;}

while ($i <= $i1) {
    $array1 [] = $i;
    $i = $i + 2;
    }

foreach ($array1 as $i) {
    echo $i;
    echo '<br>';
};
ivashkevich

У вас всё хорошо и с логикой и с алгоритмами. Есть только небольшая проблема со стилем кода и названиями переменных. То что находится внутри фигурных скобок нужно выносить на отдельные строки. Вот так:

if (условие) {
    действие
}

Переменную $i лучше назвать $from. $i1 лучше назвать $to.
При добавлении новых элементов в массив в конструкции между именем массива и квадратными скобками не должно быть пробелов. Вот так:

$arr[] = 123;

Позже напишу отдельную статью по этой теме. И еще раз - с задачей вы справились на все 100%. Кодстайл - это уже профессиональный уровень, но будет хорошо если вы уже сейчас начнете писать следуя этим правилам. Это даст вам преимущество.

serb2017

Благодарю Вас за совет. Действительно, нужно быть внимательным к "мелочам", особенно в жизни !

1nSide

Не получилось в одной строке ваил условия написать для вывода(

$i = 345;
$array = [];

while ($i <= 357)
{
    if($i%2==0){
        $array[] = $i;
    }
    $i++;
}

foreach ($array as $value)
{
    echo $value . '  ';
}
ivashkevich

А их и не надо в одну строку писать, тут всё правильно и понятно :)

1nSide

Ну или так, так вроде еще никто не делал)

$i = 345;
$array = [];

while ($i <= 357)
{
        $array[] = $i;
        $i++;
}

foreach ($array as $value)
{
    if($value%2==0)
    {
        echo $value . '  ';
    }
}
ivashkevich

Не соответствует заданию, так как массив должен содержать только чётные числа

1nSide

Еще так можно

$i = 345;
$array = [];

do
{
    if($i%2==0)
    {
    $array[] = $i;
    $i++;
    }
} while ($i <= 357);

foreach ($array as $value)
{
        echo $value . '  ';
}
ivashkevich

А здесь у вас бесконечный цикл, вы хоть проверяйте, что оно работает.

1nSide

Теперь работает))

$i = 345;
$array = [];

do
{
    if($i%2==0)
    {
    $array[] = $i;
    }
    $i++;
} while ($i <= 357);

foreach ($array as $value)
{
        echo $value . '  ';
}
ivashkevich

Другое дело! :)

SlipKnot
<?php

$x = 345;
while ($x < 357) {
    if ($x % 2 == 0) {
        $array[] = $x;
        }
     $x ++;
}

foreach ($array as $key)
{
    echo $key . "<br>";
}
ivashkevich

Тут всё гуд) Потенциально может возникнуть ошибка, если вместо 357 мы захотим установить границу 358. Более надежным и универсальным условием будет меньше либо равно:

while ($x <= 357) {
SlipKnot
<?php
$x = 345;
while ($x <= 357) {
    if ($x % 2 == 0) {
        $array [] = $x;
    }
    $x ++;
}
foreach ($array as $item) {
    echo $item . '<br>';
}
ivashkevich

Отлично =)

Fox-24

Спасибо за урок!

<?php

$startnum = 345; 
$endnum = 357;
$array = [];

while ($endnum != $startnum) {
    $res = $endnum % 2;
    --$endnum;

    if ($res != 0) {
        $array[] = $endnum;
    }
}

foreach ($array as $value) {
    echo $value . '</br>';
}
ivashkevich

ААА, ты куда так разогнался, я не успеваю проверять=)

Хорошо, но можно чуть упростить:

while ($endnum != $startnum) {
    if ($endnum % 2 !== 0) {
        $array[] = $endnum;
    }
    $endnum--;
}

То есть не зачем создавать переменную $res - можно сразу проверять.

Fox-24

Да, прет меня от уроков с этого сайта xD

ААА, ты куда так разогнался, я не успеваю проверять=)

Согласен, был такой вариант, пробовал, но что-то пошло не так, видимо была синтаксическая ошибка. Спасибо:)

ArtemijeKA

1.

$a = 345;
$arr = [];
while ($a <= 357) {
    if ($a % 2 == 0) {
        $arr[] = $a;
    }
    $a++;
}
foreach ($arr as $val) {
    echo $val . '<br />';
}
ivashkevich

Отлично!

virtual2018
<?php
$currentNumber = 345;
$array = [];
while ($currentNumber <= 357) {
    if (!($currentNumber % 2)) {
        $array[] = $currentNumber++;
    }
    $currentNumber++;
}
foreach ($array as $index)
    echo '<br>' . $index;
ivashkevich
if (!($currentNumber % 2)) {

тут не сразу понятно что ожидается, лучше сравнивать с нулём - так будет более явно.

Для тела цикла и условий всегда используйте фигурные скобки, даже если там одна строка. В PHP это стандарт.

Mike

Спасибо за урок, весьма понятно и доходчиво, отличный проект!

<?php
$x=0;
$massiv = [];
while ($x < 359){
    $x++;
    if ($x > 350 && $x % 2 == 0) {
         $massiv[]=$x;
    }
}

foreach ($massiv as $num) {
    echo $num . '<br>';
}
ivashkevich

Можно начинать не с нуля, а с 345. И непонятно, почему здесь 350, а не 345.

XXX
<?php

$i=345;
$mas=[];
while($i<=357){
    if($i%2==0){
        $mas[]=$i;
        $i++;
    }
    else $i++;
}

foreach($mas as $value){
    echo $value.'<br>';
}
ivashkevich

$i++ не зависит от условия, можно просто в конце каждой итерации делать.

Для блоков if и else всегда используйте фигурные скобки, даже если там одна строка.

XXX

После изменение значения max_execution_time с 180 на 1 сервер так же продолжает выполнение кода с бесконечных единичек, а не завершает работу скрипта через 1 секунду. В чем проблема? Или я не так что-то понял?

ivashkevich

Попробуйте добавить в цикле паузы в 100 мс и посмотрите на разницу.

Invisible

У меня аналогичная ситуация. Как добавить паузы в цикле? В уроке об этом ничего не сказано.

ivashkevich

А погуглить? Просто как сделать паузу в PHP.

SashkoUkraine
<?php

$startNumber = 345;
$endNumber = 357;
$oddNumber = [];

while($startNumber <= $endNumber) {
    if($startNumber % 2 === 0) {
        $oddNumber[] = $startNumber;
    }
    $startNumber += 1;
}

foreach ($oddNumber as $number) {
    echo "--" . $number . "<br>";
}
ivashkevich

Ок.

Вместо

$startNumber += 1;

лучше использовать

$startNumber++;
Bugaga159
$x = 345;
$y = 357;
$arrs = function(int $start, int $stop){
    $arrResult = [];
    while ($start <= $stop) {
        if($start%2 == 0) {
            $arrResult[] = $start;
        }
        $start++;
    }
    return $arrResult;
};
foreach ($arrs($x, $y) as $key => $arr) {
    echo $key+1 . ' - ' . $arr . '<br>';
}
ivashkevich

Хорошо понимаете синтаксис языка - это похвально. Но в целом решение выглядит переусложненным, можно же просто выводить числа при выполнении условия.

Pro100Bah
echo 'Homework15' . '<br>';
$array = [];
$a = 345;
while ($a <= 357) {
    if ($a % 2 == 0) {
        $array[] = $a;
    }
    $a++;
}
var_dump($array);
foreach ($array as $index => $value) {
    echo $index . ' ' . $value . '<br>';
}

Понравилось домашнее задание. Но сначала раза 2 проверил себя по уроку. С директивой max_execution_time почитал, но если я ставлю ее 1 мс у меня вообще не открывается страничка, а так по умолчанию стояло 180.

ivashkevich

По дз - ок. За одну миллисекунду не успеет ничего выполниться.

Pro100Bah

Понятно, принцип работы директивы ясен.

red.shuhov48@gmail.com
        $numb = 345;
        $array = [];

        while ($numb++ < 357){
            if ($numb % 2 == 0){
                $array[] = $numb;

            }
        }

        var_dump($array);

        foreach ($array as $item){
            echo $item . '  ';
        }
ivashkevich

Отлично

volodia.pavloff201343@gmail.com
<?php
$array = [];
$i = 357;
while ($i >= 345){
    if ($i%2 == 0) {
        $array[] = $i;
    }
    $i--;
}

foreach ($array as $index => $value) {
    echo $array[$index] . '<br>';
}
?>
ivashkevich

Ок!

rashik-2009@yandex.ru
<?php

$i = 344;

while ($i <= 354) {

    $i = $i + 2;

    $array[] = $i;
}

foreach ($array as $index => $i) {
echo $index . ' ' . $i . '<br>';
}
echo 'The end';

?>
ivashkevich

А где проверка на чётность? Числа в условии могут поменяться.

ashfedor

Немного добавил от себя чтоб массив нагляднее был

$i = 345;
while ($i < 357) {
    if ($i % 2 == 0) {
        $for[] = $i;
    }
    $i++;
}
foreach ($for as $key => $value) {
    echo $key . ' => ' . $value . '<br>';
}
ivashkevich

$for - плохое название для массива. Лучше хотя бы $array. Перед циклом стоит его проинициализировать как пустой массив:

$array = [];
while ...
babls2332@gmail.com
<?php
$arr = [];
$i = 345;
while ($i <= 357) {
    if ($i % 2 === 0) {
        $arr[] = $i;

    }
    $i++;
}

foreach ($arr as $value) {
    echo $value . '<br>';
}

Цикл в while(true) вызывает бесконечный цикл. max_execution_time равный 1 позволяет прервать скрипт, если он не выполнился в течении 1 секунды.

ivashkevich

Отлично!

shtiher@yandex.ru
<?php

$a = 345;
$b = 357;
$arrEven = [];

while ($a <= $b) {
    if ($a % 2 < 1) {
        $arrEven[] = $a;
    }
    $a++;
}
foreach ($arrEven as $numEven) {
    echo $numEven . '<br>';
}
ivashkevich

Хорошо. Но вместо

$a % 2 < 1

лучше все же

$a % 2 === 0
Grewi
$min = 345;
$max = 358;
$evenNumber = [];
echo 'Все четные числа от <b>' . $min . '</b> => ';
while ($min <= $max) {
    if ($min % 2 === 0) {
        $evenNumber [] = $min;
    }
    $min++;
}
foreach ($evenNumber as $eventForeach) {
    echo $eventForeach . ' ';
}
echo ' <= до <b>' . $max . '</b> включительно.';
ivashkevich

Отлично

lilit

Первое:

<?php
$array = [];
$i = 345;

while ($i <= 357) {
    if ($i % 2 == 0) {
        $array[] = $i;
    }
    $i++;
};

foreach ($array as $evenNumber) {
    echo $evenNumber . '<br>';
}

Второе: Привел этот код к тому, что 1 выводится бесконечно. Цикл выполняется всегда, т.к. в его условии всегда остается истина.
Далее я изучила max_execution_time и если правильно поняла, то это время выполнения скрипта.
При изменении на 1 секунду выдает ошибку через секунду (Fatal error: Maximum execution time of 1 second exceeded).
Эээ.. выполнение скрипта затрачивает больше времении поэтому останавливается аварийно?

ivashkevich

Отлично, всё верно.

Boodoo
<?php
    $arr = [];
    $i = 345;

    while ($i <= 357) {
        if($i % 2 == 0) {
            $arr[] = $i;
        }
        $i++;
    }

    var_dump($arr);
ivashkevich

Отлично

pavliggs@mail.ru
<?php

$numbers = [];
$number = 345;
while ($number <= 357) {
    $numbers[] = $number;
    $number++;
}

foreach ($numbers as $key => $number) {
    echo $key . ' - ' . $number . '<br>';
}
artemship
<?php
$evenNumbers = [];
$i = 345;
while ($i <= 357) {
    if ($i % 2 == 0) {
        $evenNumbers[] = $i;
    }
    $i++;
}
foreach ($evenNumbers as $number) {
    echo $number . '<br>';
}

Код из домашнего задания приводит к зацикливанию, т.к. условие всегда будет выполняться. Директива max_execution_time задает максимальное время в секундах, в течение которого скрипт должен полностью загрузиться, иначе выдаст ошибку.

ivashkevich

Отлично

che4151999@gmail.com
<?php
$arr = [];
$start = 345;
while ($start < 357) {
    if ($start % 2 == 0) {
        $arr[] = $start;
    }
    $start++;
}

foreach ($arr as $key) {
    echo $key . ', ';
}
ivashkevich

Отлично

Dram
<?php
$i = 346;
$arry = [];
while ($i > 345 && $i < 357) {
    $i++;
    if ($i%2==0){
        $arry[] = $i;
    };
}
foreach ($arry as $znachenie ){
    echo $znachenie . '<br>';
}
ivashkevich

Зачем вы отвечаете к чужим комментариям?

Dram

Сори, только сейчас заметил что форма отправки верху. А я снизу обыскался. Лента комментов растягивается, было бы логично продублировать форму добавления комментов вниз при n >10

У меня так на моих сайтах :))

P.S. и еще, если сразу код в правильно в теги кода не заключил, то все - при редактировании уже не показывает плашку BB кодов

krollik1000000@gmail.com
$number = 345;

while ($number <= 357) {
    $arr = [];
    if ($number % 2 === 0) {
        $arr[] = $number;
    }
    forEach ($arr as $numbers) {
        echo $numbers.'<br>';
    }
    $number++;
}

не понял нащёт изменения времени выполнения скрипта у меня стояло 180 я изменил на 1 но страница так и осталась грузится,может я что то не понял?

ivashkevich

По коду:

  • foreach пишется маленькими буквами
  • внутри одного цикла каждый раз выводится массив на текущем шаге. Получается цикл в цикле, хотя нужно вывести готовый массив только один раз

По вопросу: веб-сервер перезапускали после изменения настроек?

Moskva

Код:

$x = 345;
$n=0;

while($x<357){
    if ($x % 2 == 0){
        $evenArray[$n] = $x ;
        $n++;
    }
    $x++;
}
foreach($evenArray as $even){
    echo $even . '<br>';
}

Код который исполняет бесконечный цикл:

while(true){
    echo 1;
}

Если изменить в конфигурационном файле max_execution_time на 1, то это приведет к ошибке.

ivashkevich

Перед циклом нужно определить пустой массив $evenArray.
Переменная $n по сути лишняя - можно добавлять элементы в массив без указания индексов.

Moskva

Вот так?

$x = 345;
$evenArray = [];

while($x<357){
    if ($x % 2 == 0){
        $evenArray[$n] = $x ;
        $n++;
    }
    $x++;
}
ivashkevich

Переменная n не проинициализирована. В самый первый раз, где она используется в качестве ключа массива будет ошибка! Ведь такой переменной ещё нет. И не нужна она вам. Добавляйте элементы в массив без использования ключа.

esqrx
<?php

$i = 344;
while ($i <= 357) {
    if ($i % 2 == 0) {
        $arr[] = $i;
    }
    $i++;
}

foreach ($arr as $value) {
    echo $value;
    echo '<br>';
}
ivashkevich

Отлично

Bizzzon
$i = 344;
while ($i < 357 ) {
    if ($i % 2 == 0) {
        $array[] = $i;
    }
    $i++;
}
foreach ($array as $value) {
    echo $value . ' ';
}
ivashkevich

Отлично!

Reechniy
<?php

$i=345;

while ($i<=357){
    echo $i;
   if( $i%2==0){
       $arr[]=$i;
   }
   $i++;
    echo'<br>';
}
echo 'Четные: ';
foreach ($arr as $value) {
    echo $value.',';
}
ivashkevich

Отлично!

kvakazuabr

1
$arr3 = [];
    $num = 345;
    while($num<357) {
        $num++;
        if($num%2===0) {
            $arr3[] = $num;
        }
    }
    foreach($arr3 as $index => $speed) {
        echo $index . ' ' . $speed . '<br>';
    }
2 
не стоит этого делать будет бесконечно выводить 1 пока не зависнет страница 

3
задает максимальное время в секундах, в течение которого скрипт должен полностью загрузиться.
`4 выводит n-количество 1 и останавливается``
ivashkevich
  1. Если вы поменяете начальное число на 344, то оно пропустится. Сначала нужно выполнять проверку, а потом уже инкрементить число.
  2. Ок
  3. Так какой будет результат?
AlexxxEy

$i = 345;
while($i != 357){
    $i++;
    if($i % 2 == 0){
        $arr[] = $i;
    }
}
foreach($arr as $index => $n){
    print $index . ' => ' . $n . '</br>';
}
print '</br>';
ivashkevich

Если вы поменяете начальное число на 344, то оно пропустится. Сначала нужно выполнять проверку, а потом уже инкрементить число.

Aleks

С помощью цикла while создайте массив, содержащий чётные числа от 345 до 357. Затем выведите элементы массива с помощью цикла foreach.


<?php
$arrayEvenNumbers[0];
$i = 345;

while ($i <= 357) {
        if ($i % 2 == 0){
            $arrayEvenNumbers[] = $i;
        }
        $i++;
}

foreach ($arrayEvenNumbers as $index => $value){
   echo $value . '<br>';
}

**К Бесконечному циклу**
ivashkevich

Если начальная граница сместится и будет четным числом, например:

$i = 345;

то это число в выборку не попадет. Счётчики инкрементятся в конце итерации, как правило, а не в начале.

Aleks

Поправил

ivashkevich

Отлично!

Vladimir96
//Домашнее задание
//Массив внутри цикла
    $numberForArr = 345;

    while($numberForArr < 358) {

        if($numberForArr % 2 == 0) {
            $array[] = $numberForArr;
        }
        $numberForArr++;
    }

    foreach ($array as $number) {
        echo $number;
        echo '<br>';
}
//Проверка кода
    while (true) {
        echo 1;//бесконечный цикл с выводом 1
    }

 /*Когда я прописал /max_execution_time = 1,
 то скрипт выдал ошибку,Fatal error: Maximum execution time of 1 second exceeded*/
ivashkevich

В первом задании цикл foreach бессмысленный. Там в массиве всегда один элемент. Ознакомьтесь с другими решениями. Не нужно было делать цикл в цикле.

Vladimir96

Такой вопрос, почему когда мы пишем такой код

$arr[] = $x;

то значение переменной вставляется в индекс массива, а не заменяет его на само значение переменной? Или я что-то не правильно понял?

ivashkevich

Ничего в индекс массива не вставляется. Эта запись добавляет элемент в массив. А в вашем коде каждый раз создаётся новый массив с одним элементом.

romaartemov1999@gmail.com
<?php

function get_EvenNumb(int $x, int $y)
{
    if($x - $y > 0) {
        $max = $x;
        $min = $y;
    }
    else{
        $max = $y;
        $min = $x;
    }

    while ($max >= $min)
    {
        if($min % 2 == 0)
        {
            $even[] = "$min";
        }
        $min++;
    }
    foreach ($even as $value) {
        echo $value . '<br>';
   }

}

get_EvenNumb(345,750);
ivashkevich

В именах функций не должно быть никаких подчеркиваний.
$even[] = "$min"; - зачем здесь число в строку превращаете?

Ooleg
$even = [];
$i = 345;

while ($i <= 357){
    if ($i% 2 == 0){
        $even[] = $i;
    }
    $i++;
}

foreach ($even as $value){
    echo $value;
    echo '<br>';
}
ivashkevich

Число 357 не проверяется.

Ooleg

Спасибо, поправил.

ivashkevich

Теперь ок

Dreft
<?php
$arr = [];
$i = 345;
while ($i <= 357) {
    if ($i % 2 == 0) {
        $arr[] = $i;
    }
    $i++;
}
foreach ($arr as $value) {
    echo $value . " ";
}
ivashkevich

Отлично

Clawson
<?php
$evenNums = [];
$startPoint = 345;
$endPoint = 357;
$count = $startPoint;
while ($count <= $endPoint){
    if ($count % 2 == 0) {
        $evenNums[] = $count++;
    }
    else {
        $count++;
    }
}
foreach ($evenNums as $num) {
        echo $num . '<br>';
    }

max_execution_time задает максимальное время в секундах (int), в течение которого скрипт должен полностью загрузиться. Если этого не происходит, работа скрипта завершается. Помогает исключить зависания при корявом коде. По умолчанию - 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0.

ivashkevich

Лучше в конце итерации делать инкремент, в одном месте. В остальном все хорошо.

H3licoptero

Вот на задаче с перебором массива я убедился окончательно, что программирование не всем дано) Солидарен с prinzplanloser0514@gmail.com. Тоже не осилил. А из ответов в комментариях понял, что сложного ничего не было. Артём, какие толковые ресурсы для практики Вы бы могли порекомендовать ещё? Просто ясно, что если это не пойму, дальше не смогу двигаться нормально.

ivashkevich

https://www.hackerrank.com/ можно тут простые задачи поискать. Но вряд ли будет что-то проще, чем этот урок

H3licoptero

Спасибо! Буду делать)

dliashchenko
<?php
$arrayNumbers = [];
$startNumber = 345;
$endNumber = 357;

while( $startNumber <= $endNumber){
        if($startNumber %2 == 0){
            $arrayNumbers[] = $startNumber;
        }
        $startNumber++;
}

foreach ($arrayNumbers as $number) {
    echo $number.",<br/>";
}
ivashkevich

++$startNumber - когда нет разницы, что первее сделать, увеличить и вернуть, или вернуть а потом увеличить, стоит использовать постинкремент

H3licoptero
$ar = [];
$i = 345;

while ($i <= 357) {
    if ($i % 2 === 0) {
        $ar[] = $i;
    }
    $i++;
}

foreach ($ar as $value) {
    echo $value . '<br>';
}

Сделяль(насколько можно считать это самостоятельным решением после стольких фейлов))

ivashkevich

Последнее число не проверяется. Если потом вдруг верхняя граница изменится на 358, то оно не попадет в массив четных чисел. А должно.

kvakazuabr
$i = 345;
$arr = [];
while ($i < 357) {
  if($i%2==0) {
    $arr[] = $i;
  }
  $i++;
}
foreach($arr as $value) {
  echo $value . ' ';
}

бесконечно выводило 1
изменил запустил и особой разницы не заметил

ivashkevich

Отлично. Значит нужно ещё меньше таймаут поставить.

Evilinside
//С помощью цикла while создайте массив, содержащий чётные числа от 345 до 357. Затем выведите элементы массива с помощью цикла foreach.

$i = 345;
$arr = [];

while ($i <= 357) {

    if ($i % 2 == 0) {
        $arr[]=$i;
    }
    $i++;
}
foreach ($arr as $elem){
    echo $elem."\n";
}

//2ое задание: Цикл будет бесконечным ( в данном случае скрипт проработает 30 секунд, после чего автоматически прекратит работать). Если поставить значение max_execution_time = 1, то скрипт прекратит работу через 1 секунду.

ivashkevich

Супер!

zuxarevaalina88@gmail.com
<?php
$i=345;
$mass=[];
while ($i<357) {
      if ($i %2 == 0) {
    $mass[] = $i;

}
    $i++;
}

var_dump($mass);
?>
2ое задание - это бесконечный цикл.
при max_execution_time 1 секунда получаем: Fatal error: Maximum execution time of 1 second exceeded in W:\domains\myproject.loc\www\content.php on line 3
ivashkevich

Поправьте отступы, почему всё пляшет? В PhpStorm можно нажать Ctrl+Alt+L и оно само исправится.

Не вижу второго цикла foreach. Перечитайте ДЗ.

Число 357 тоже должно проверяться. Верхняя граница может измениться, а код должен продолжить работать. Изменим, например, на 358, а оно не будет проверяться. Исправьте это.

Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно
Логические задачи с собеседований