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


Serega

Привет, Такой вопрос по домашке, Через оператор if определяю число четное и нечетное, а вот через тернарный оператор ни как не получается.)

ivashkevich

Как вариант:

echo $x % 2 == 0 ? 'четное' : 'нечетное';
ol

Элегантно.

Igorencio

echo ($x % 2 == 0) ? 'четное' : 'нечетное';
нужны ли тут скобки?

ivashkevich

нет

alser700@gmail.com

У меня так)

echo $x % 2 ? 'нечетное' : 'четное';
ivashkevich

Не самое очевидное решение. Лучше явно сравнивать результат с нулём.

kizil.vitali@gmail.com

Привет, хочу водить числа не в код, а в браузере и использовать их, как это лучше сделать?

ivashkevich

Привет, хорошее желание! Скоро будет урок по этой теме, не забегай вперед.

Ogurchik

Привет! В примере про четное-нечетное, если ввести, например, $x = 2.2 (т.е. присвоить не integer, а float), то результат выводится как "четное", хотя это дробное число. Скажи, пожалуйста, почему так происходит и как сделать проверку условия на целочисленное значение?

ivashkevich

Привет, можно в самом начале сделать вызов функции is_int(число), которая проверит является ли значение целым числом, и вернёт true или false. Документация по функции тут.

Ogurchik

Спасибо! Всё получилось)
Еще 1 вопрос. В последнем примере этого урока, если я не ошибаюсь, правильно будет написать условие if ($x >= 100) , а не if ($x > 100). Посмотрите, пожалуйста.

ivashkevich

Совершенно верно! Спасибо, исправил =)

phenomg

2) Выполнятся 1 и 4 выражение, так как "string" и 5 переводятся в значение true, в то время как 0 и null (отсутствие значения) преобразуются в значение false.

3)

$a = 5;
$number = $a / 2 == 0 ? "четным" : "нечетным";

echo "Число $a является $number";
ivashkevich

Совершенно верно =)

Igorencio

А вот тут я не согласен, вместо знака определения остатка стоит знак деления. Он не будет определять четность или нечетность. Вроде бы я прав)))

ivashkevich

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

ivashkevich

Тут у Вас ошибку нашли - так не работает.

Generalisimus
<?php
/*
if ('ball in goal'){
    echo "nice shoot";
}
else {
    echo "bol in out";
}
*/
/*
if (0) {
    echo "true";
}
else {
    echo "false";
}
*/
/*
 if (null) {
    echo"true it`s null";
}
else {
    echo"it is wrong number";
}
*/
/*
if (5) {
    echo "password is correct";
}
else {
    echo  "password is incorrect";
} // в данном случае число 5 явлается числом true
*/
/*
$a=5;
if ($a%2) {
    echo "переменная  нечетная";
} else {
    echo "переменная  четная";
}
serb2017
$x = 7 ;
echo  '<br>', 'число  ', $x ;
$x=$x % 2 == 0 ? '  чётное' : '  нечётное' ;
echo   $x ;

На экране:
число 7 нечётное

ivashkevich

Хорошо, но есть пара мелких замечаний:

  1. Не стоит переменной $x, в которой лежит число, присваивать строку. Ваша переменная должна быть для чего-то предназначенной, и нельзя в неё записывать что-то постороннее. Назовите итоговую переменную $result, если уж хочется использовать переменную. А вообще - здесь сразу можно писать:
    echo $x % 2 == 0 ? '  чётное' : '  нечётное' ;
  2. Поправьте отступы. У вас местами по 2 пробела в коде. Такого быть не должно. Прочитайте про Reformat Code в PhpStorm.
serb2017

Прочитал и воспользовался Reformat Code в PhpStorm. Полезная штука !

ivashkevich

А-то!)

markEvillive
<?php
if ('string') {
    echo 'Условие выполнено';
}else{
    echo 'Условие не выполнено';
}// Условие выполнено, ибо любое ненулевое чисо (строка) приводится к true, и условие выполняется
 echo "<br>";
if (0) {
    echo 'Условие выполнено';
}else{
    echo 'Условие не выполнено';
} // Условие не выполнено, ибо нулевое значение приводится к false
echo "<br>";
if (null) {
    echo 'Условие выполнено';
}else{
    echo 'Условие не выполнено';
} // То же, что и в предыдущем случае
echo "<br>";
if (5) {
    echo 'Условие выполнено';
}else{
    echo 'Условие не выполнено';
} // условие выполнено
echo "<br>";
?>

Проверка четности:

  1. С помощью тернарного оператора:

    <?php
    $x = 7;
    $even = $x % 2 == 0 ? 'Число четное' : 'Число нечетное';
    echo $even;
    ?>
  2. С помощью if-else:

    <?php
    $x = 10;
    if($x % 2 == 0){
    echo 'Число четное';
    }else{
    echo 'Число нечетное';
    }
    ?>
  3. С помощью switch:
    <?php
    $x = 5;
    switch ($x % 2){
    case 0:
        echo 'Число четное';
        break;
    default:
        echo 'Число нечетное';
    }
    ?>
ivashkevich

Отлично! Плюс за вариант со switch-case! =)

1nSide
$x = random_int(-1, 10);

if ($x > 0) {
    echo 'число ' . $x . ' четное число или нет? ';
    echo '<br>' . '<br>';

    switch ($x) {
        case $x % 2 == 0:
            echo 'число ' . $x . ' четное';
            break;
        case $x % 2 == 1:
            echo 'число ' . $x . ' нечетное';
            break;
   }
} else { 
   echo 'число меньше или равно 0';
}
ivashkevich

Ок, из улучшений можно сделать следующее:

echo '<br>' . '<br>';

можно упростить до

echo '<br><br>';

А вот это:

case $x % 2 == 1:

лучше заменить на

default:

Так как:

  • во-первых, лучше всегда делать секцию default
  • во-вторых, интерпретатору не нужно будет вычислять выражение $x % 2 == 1 и он просто выберет оставшийся вариант.

Хорошо, что предусмотрели вариант с числом меньше нуля - за это респект :)

nemo.dont@gmail.com
  1. Выполнились только 1 и 4 условия, 2 и 3 условия (а также пустая строка) после приведения к типу Boolean получают значение false и поэтому условия не выполняются.
  2. После выполнения, как всегда, посмотрела уже готовые варианты в комментариях, поняла как можно упростить. И все же высылаю то, что пришло в голову первым
<?php
$x = 70;
$even = 'Четное';
$odd = 'Нечетное';

$y= $x %2 == 0 ? $y=$even : $y=$odd;

echo $y;

?>
ivashkevich

Не нужно первое, что пришло в голову :)
В программировании важно не только придумать решение и сделать чтобы работало, нужно еще и поработать над его упрощением. Это самое сложное, но делать это нужно.
По поводу вот этой строки:

$y= $x %2 == 0 ? $y=$even : $y=$odd;

Когда вы делаете $y = $even, в $y уже попадает нужное значение. Вам же нужно в $y передать результат тернарного оператора, то есть вот так:

$y= $x % 2 === 0 ? $even : $odd;
nemo.dont@gmail.com

к сожалению, пока то, что первое пришло в голову приходит долго и мучительно. а когда начинаю что-нибудь "мудрить" все ломается ))

вот даже по поводу исправленной строки сидела и 5 минут думала что, как и почему )

ivashkevich

Это приходит не сразу, нужно время. Я по возможности буду направлять в нужное русло.

Fox-24
if ('string') {
    echo 'Условие ОК'; // Будет выполняться т.к. идет проверка на true или false. В данном случае строка не пустая и не содержит 0, значит true
}

if (0) {
    echo 'Условие ОК'; // Не будет выполняться т.к. в данном случае строка содержит 0, значит false
}

if (null) {
    echo 'Условие ОК'; // Не будет выполняться null - это отсутствие данныех, а значит false
}

if (5) {
    echo 'Условие ОК'; // Будет выполняться т.к. в данном случае строка содержит 5(не 0 и не пустую строку), значит true
}

$x = 2; // Вводные данные

$result = $x % 2 == 0 ? "Число $x четное" : "Число $x не четное"; // Проверка остатка при делении на 2 и запись результата проверки условия в переменную result

echo $result; // Выводим результат
ivashkevich
if (0) {
    echo 'Условие ОК'; // Не будет выполняться т.к. в данном случае строка содержит 0, значит false
}

if (5) {
    echo 'Условие ОК'; // Будет выполняться т.к. в данном случае строка содержит 5(не 0 и не пустую строку), значит true
}

Это не строки, это - числа. Ещё можно просто назвать это выражениями, но не строками.

А так - всё хорошо =)

Fox-24

Да, конечно, был не внимателен при описании. Спасибо!:)

Gleb

В примере про четное/нечетное, если ввести число состоящее более чем из 15 цифр, например, 9999999999999999 (16 цифр), то результат выводится как "Число чётное". Это баг или фича? ))

ivashkevich

Это баг) можете прочитать об ограничениях значений типа integer - они не бесконечны.

honor
$a = 3;
$result = $a % 2 == 0 ? 'чётное' : 'нечетное';
echo $result;
ivashkevich

Отлично!

Ros
$x = -6;
if ($x <= 0) {
 echo 'Число меньше или равно нулю';
}
else {
    echo $x % 2 == 0 ? 'Чётное' : 'Нечётное';
}
ivashkevich

норм!

mangol1167
<?php

if ('string') {
    echo 'Условие выполнилось'; // строка получается true
}
echo '<br>';

if (0) {
    echo 'Условие выполнилось'; // ноль получается как false
}
echo '<br>';

if (null) {
    echo 'Условие выполнилось'; // null пустая строка тоже как false
}
echo '<br>';

if (5) {
    echo 'Условие выполнилось'; // положительное число интерпритируется как true
}

echo '<br>';
$x = 6;

$result = $x % 2 == 0 ? 'Четное число' : 'Нечетное число'; // проверяем равен ли остаток от деления 0 и если да то выводим true, если нет то false

echo $result;
ivashkevich

null - это не пустая строка. Пустая строка это - ''. А null - это отсутствие значения. При преобразовании к bool приводится в false.

В остальном все правильно.

mangol1167

не правильно выразил свои мысли))) имел ввиду "нулевое" (отсутствующее) значение))

ivashkevich

Даже нулевым его называть не стоит. Ноль - это 0. Это все же присутствие значения числа 0. А null - это вообще отсутствие какого-либо значения. Называйте его null, и никак иначе.

mangol1167

хорошо! Спасибо за разъяснение =)

Yuriy

читал про то, что использование if ($a === $b) быстрее выполняется, чем if ($a == $b) и switch case. Насколько это верно и имеет смысл такого подхода в программировании?

ivashkevich

== работает медленнее, потому что приводит перед сравнением аргументы к одному типу. А вот === сразу сравнивает, без приведения типов.

3 == '3' // true

но

3 === '3' // false

Реальной разницы в скорости вы не заметите в 99% случаев, но дело в том, что за счет более строгого сравнения при использовании === достигается бОльшая надёжность кода.

Kutkh
$x =  3;

$x % 2 ? $result = 'Число нечетное' : $result = 'Число четное';

echo $result;
ivashkevich

Неправильное использование тернарного оператора - он возвращает результат. Правильно вот так:

$result = $x % 2 === 1 ? 'Число нечетное' : 'Число четное';

То есть присваивать нужно результат его работы, а не внутри него.

Kutkh

понял, спасибо!

Mike
$x= 3;
$x%2==0 ? $x='chet' : $x='nechet';
echo $x;
ivashkevich

Неправильно используете тернарный оператор - смотрите комментарий выше.

virtual2018
<?php
$number = 1;
echo $result = $number % 2 ? 'нечетное число' : 'четное число';
echo '<br>';

if (‘string’)
    echo 'Условие выполнилось'.'<br>'; //string this is TRUE 
if (0)
    echo 'Условие выполнилось'.'<br>';
else
    echo 'Условие не выполнилось'.'<br>'; // 0 this is FALSE
if (null)
    echo 'Условие выполнилось'.'<br>';
else
    echo 'Условие не выполнилось'.'<br>'; //NULL this is FALSE
if (5)
    echo 'Условие выполнилось'.'<br>'; //5 this is TRUE

нечетное число
Условие выполнилось
Условие не выполнилось
Условие не выполнилось
Условие выполнилось

XXX
<?php
if('string')
    {echo 'Условие выполняется','<br>';}
else
    {echo 'Условия не выполняется','<br>';}
if(0)
    {echo 'Условие выполняется','<br>';}
else
    {echo 'Условия не выполняется','<br>';}
if(null)
    {echo 'Условие выполняется','<br>';}
else
    {echo 'Условия не выполняется','<br>';}
if(5)
    {echo 'Условие выполняется','<br>';}
else
    {echo 'Условия не выполняется','<br>';}

$x=3;

echo $x%2==0?'Число четное':'число не четное';
SashkoUkraine
$b = 7;

$result = $b % 2 === 0 ? "четное" : "не четное";

echo $result;

// не четное
ivashkevich

ок!

Pro100Bah

В статье
"Хорошо, давайте пройдёмся по особенностям оператора switch, о которых нужно помнить всегда.
3.несколько case-ов могуть быть записаны подряд, тогда код в секции вЫЫполнится при выполнении хотя бы одного из условий."

В 3 условии 2 буквы "Ы" в слове "выыполнится", у Вас опечатка.

ivashkevich

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

Cloudmeister

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

ivashkevich

Ок, постараюсь.

90auto90@gmail.com
<?php

$x = 5;

$y = $x % 2 == 0 ? ' четное' : ' нечетное';
echo $x . $y;
ivashkevich

Помимо того, что имя $y ни о чем не говорит - все ок)

ashfedor
// Дом задание

if ('string') {
    echo 'Уcловие выполняется'; //  уссоовие выполняется т.к. строка не пустая true
}
echo '<br>';
 if(0){
    echo 'условие выпонилось'; // условие не выпоняется т.к значение false
 }
 else{
    echo 'условие не выпоняется т.к значение false';
 }
echo '<br>';
if(null){
    echo 'условие выпонилось'; // условие не выпоняется т.к значение  null=false
}
else{
    echo 'условие не выпоняется т.к значение  null=false';
}
echo '<br>';
if(5){
    echo 'условие выпонилось 5 - true'; // условие выпоняется т.к значение  true
}
echo '<br>';

$x = 5;
$even = $x % 2 == 0 ? 'четное': 'не четное';
echo 'число' . $x . $even;
NrG
<?php 

if ('string') {
    echo 'Условие выполнилось' . '<br>';
}
// Условие выполнилось, т.к. строка не пустая, возвращает true

if (0) {
    echo 'Условие выполнилось' . '<br>';
}
// Условие не выполнилось, т.к. "0", пустая строка и null возвращают false

if (null) {
    echo 'Условие выполнилось' . '<br>';
}
// Условие не выполнилось, т.к. null, пустая строка и "0" возвращают false

if (5) {
    echo 'Условие выполнилось'. '<br>';
}
// Условие выполнилось, т.к. число, возвращает true

$a = 23;
$isEvenNum = ($a % 2 == 0) ? 'чётное число' : 'нечётное число';
echo '$a = ' . $a . ' это ' . $isEvenNum; 

?>
lilit

Сработает 1 и 4, так как значение true. В остальных false.

<?php

$x = 6;
echo $x % 2 == 0 ? 'Четное число' : 'Нечетное число';
ivashkevich

Отлично

Grewi
$a = 2;
echo $a % 2 == 0 ? 'число ' . $a . ' четное' : 'число ' . $a . ' не четное';

if ('string'){
    echo 'условие выполнено </br>';
} else {
    echo 'условие не выполненно </br>';
}

if (0) {
    echo 'условие выполненно </br>';
} else {
    echo 'условие не выполеннно </br>';
}

if (null) {
    echo 'условие выполненно </br>';
} else {
    echo 'условия не выполненны </br>';
}

if (5) {
    echo 'условия выполненны </br>';
} else {
    echo 'условия не выполненны </br>';
}
ivashkevich

Отлично

s-kiryak@meta.ua

Благодарю за уроки в открытом доступе! Очень выручают :)
Столкнулся с проблемой, пытаюсь с помощью оператора условий switch определить четное ли число и когда, например, ввожу значение числа с плавающей точкой у меня все-равно выполняется условие... Подскажи пожалуйста, где я ошибаюсь?

$x = -2.7;
switch ($x % 2) {
    case 0:
        echo 'Число X является четным';
        break;
    case $x > 0:
        echo 'Число Х положительное и не чётное';
        break;
    default:
        echo 'Число Х является отрицательным и не чётным';
}

Спасибо!

ivashkevich

Для этого достаточно заглянуть в документацию - http://php.net/manual/ru/language.operators.arithmetic.php
И узнать, что оператор % - это ...

s-kiryak@meta.ua

Спасибо!!!

s-kiryak@meta.ua

А вот таким образом можно поступить?

$x = 2;
$a = 'чётное';
$b = 'нечётное';
$resalt = ($x % 2 == 0) ? $a : $b; 
echo '<br> Число x ' . $resalt;
ivashkevich

Можно. Только resUlt

teslaincredible@yandex.ru

Тернарный оператор

<?php
$x = 22;
$number = $x % 2 == 0 ? 'четное' : 'нечетное';
echo $number;
ivashkevich

ОК. Кроме тернарного оператора почистил ваш ответ - это было писать необязательно.

expert12@yandex.ru
<?php
$x = 4;
$a = 'число четное';
$b = 'число не четное';
$num = ($x % 2 == 0) ?  $a :  $b;
ivashkevich

Отлично!

Boodoo
<?php
    // Код выполнится, не пустая строка = true;
    if ('string') {
echo 'Условие выполнилось';
} 
    // Код не выполнится, 0 - это false;
    if (0) {
echo 'Условие выполнилось';
} 
    // Код не выполнится, null - это false;
    if (null) {
echo 'Условие выполнилось';
} 
    // Код выполнится, любое число (кроме 0) - это true
    if (5) {
echo 'Условие выполнилось';
} 
// Тернарный оператор
$x = 7;
    echo $x % 2== 0 ? 'Четное' : 'Нечетное';
?>
ivashkevich

Куда пропали фигурные скобки и переносы? Переделайте в соответствии с уроком.

Boodoo
<?php
    // Код выполнится, не пустая строка = true;
    if ('string') {
echo 'Условие выполнилось';
} 
    // Код не выполнится, 0 - это false;
    if (0) {
echo 'Условие выполнилось';
} 
    // Код не выполнится, null - это false;
    if (null) {
echo 'Условие выполнилось';
} 
    // Код выполнится, любое число (кроме 0) - это true
    if (5) {
echo 'Условие выполнилось';
} 
// Тернарный оператор
$x = 7;
    echo $x % 2== 0 ? 'Четное' : 'Нечетное';
ivashkevich

Ок

Dram

Можно еще вопрос, тестирую условия и не могу понять.
<?php

$x = говнокодер;

if ($x >10) {
echo "Число больше 10";
} elseif ($x <= 10) {
echo "Число меньше или равно 10";
}
else {
echo "Это вообще не число братан :)";
}

Как заставить программу проверять не только значения но и тип?

ivashkevich

is_int, is_number, gettype. Для объектов - instanceof.

Moskva

Код:

    echo 'Условия в PHP' . '<br>';
    if ($u1 = 'string') {
        echo '1 - условие выполнилось' . '<br>';
    }
    if ($u2 = 0) {
        echo '2 - условие выполнилось' . '<br>';
    }
    if ($u3 = null) {
        echo '3 - условие выполнилось' . '<br>';
    }
    if ($u4 = 5) {
        echo '4 - условие выполнилось' . '<br>';
    }
    $message1 = $u1 % 2 == 0 ? '1)Чётное' . '<br>' : '1)Нечётное' . '<br>';
    echo $message1;
    $message2 = $u2 % 2 == 0 ? '2)Чётное' . '<br>' : '2)Нечётное' . '<br>';
    echo $message2;
    $message3 = $u3 % 2 == 0 ? '3)Чётное' . '<br>' : '3)Нечётное' . '<br>';
    echo $message3;
    $message4 = $u4 % 2 == 0 ? '4)Чётное' . '<br>' : '4)Нечётное' . '<br>';
    echo $message4;

Результат:
Условия в PHP
1 - условие выполнилось
4 - условие выполнилось
1)Чётное
2)Чётное
3)Чётное
4)Нечётное

Вопрос:
Почему 'string' и null чётные?

ivashkevich

Они не то чтобы четные. Просто остаток от деления на 2 равен... скольки? Выведите через var_dump

krollik1000000@gmail.com

в первом if строка приводится к true,второй 0 приводится к false,третий null тоже вроде как к false хотя var_dump выводит тоже null,четвёртый 5 переводит в true

<?php
$a = 5;
$a = $a % 2 === 0 ? 'чётное' : 'не чётное';
echo $a;
?>
ivashkevich

var_dump - выводит значение как есть.
А вот когда мы используем какое-то выражение в условии, то оно приводится сначала к булеву значению.

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

echo $a % 2 === 0 ? 'чётное' : 'не чётное';

или присваивайте в другую переменную:

$res = $a % 2 === 0 ? 'чётное' : 'не чётное';

Закрывающий тег ?> здесь не нужен - он ставится только в файлах, в которых далее идет HTML-код. В следующих уроках увидите.

ponchik157@gmail.com

Решения домашнего задания с помощью самих же учеников-гениально и очень полезно.

kamil-uzd@yandex.ru
$t = 'string';
$arr = ['string',0,null,5];

for($w=0;$w<count($arr);$w++)
{
    switch ($t)
    {
        case ($t == $arr[$w]):
            $mess = 'Условие выполнилось!';
            break;
        default:
            $mess = '';
    }
}
echo (empty($mess) ? '<br>Условие НЕ выполнилось!' : '<br>Условие выполнилось!');
?>
ivashkevich

Что это вообще такое?

irina-naletova
$a=15;
$num=$a%2==0 ? 'четное':'нечетное' // выведет нечетное т к остаток от деления равен 1 
echo $num;

не сразу понята как этот оператор работает,но все -таки позднее дошло до меня

ivashkevich

Отлично. Только название num не подходит. num говорит само за себя, что там лежит какое-то число. Более подходящее название - odd.

a-gassi@i.ua
$i = 11;
$ost = ($i % 2);
$even = ($ost == 0) ? 'Четное число' : 'Нечетное число';
echo $even;
ivashkevich

Хорошо

rammbi@yandex.ru
$x = 13;
$result = $x % 2 == 0 ? 'Число четное': 'Число нечетное';
echo $result;
ivashkevich

Отлично

Gnev1992@mail.ru
<?php
$x = 2;
$result = $x % 2 == 0 ? 'Четное' : 'Нечетное';
echo $result;
echo '<br>';
if ('string') {
    echo 'Условие выполнилось';
}
echo '<br>'; // Кавычки не пустые, поэтому условие выполнилось
if (0) {
    echo 'Условие выполнилось';
}
echo '<br>'; // Условие не выполнилось потому что значение равно 0
if (null) {
    echo 'Условие выполнилось';
}
echo '<br>'; // Условие не выполнилось так как null - отсутсвие значения
if (5) {
    echo 'Условие выполнилось';
}
echo '<br>'; // Условие выполнилось так как числовое значение выполняет условие
ivashkevich

Отлично

Bizzzon
$x = 101;
$parity = $x % 2 == 0 ? 'чётное' : 'нечётное';
echo 'Число ' . $x . ' ' . $parity; 

вот, всё работает на ура)

ivashkevich

Отлично

Bizzzon

Сначала меня сбило с толку то, что я не могу задавать какие-то действия в результате тернарного оператора. Насколько я понимаю, после "?" идут только результаты, и мы не можем давать туда какие-то действия. Первоначально я сделал ...? echo'Нечётное' : echo'чётное', но после ошибки я это исправил)

ivashkevich

То, что после ? и после : - выполняется, и после этого получившееся значение возвращается из тернарного оператора.

Reechniy

Очень долго тупил, почему у меня с нечетными отрицательными числами не работает код, оказалось пропустил знак минус, при определении четности в отрицательном диапазоне.

<?php
$x=random_int(-999,999);
echo 'Выпало число: '.$x ;
echo '<br><br>';
if($x>0) {
    echo 'Число ' . $x . ' четное или нет? ';
    echo '<br><br>';

    switch ($x) {
        case $x % 2 == 0;
            echo 'Число ' . $x . ' четное.';
            break;
        case $x % 2 == 1;
            echo 'Число ' . $x . ' не четное.';
            break;
    }
}
if($x<0) {
    echo 'Число '.$x.' меньше нуля, но является ли оно четным?';
    echo '<br><br>';

    switch ($x){
        case $x%2==0;
            echo 'Число '.$x.' меньше нуля и четное.';
            break;
        case $x%2==-1;
            echo 'Число '.$x.' меньше нуля и нечетное.';
    }
}
if($x==0) {
    echo 'Число ' . $x . ' равно нулю. Все тлен.';
}
ivashkevich

Отлично

lenapetrowa92@gmail.com

Привет !
Условия все попробовала, происходит проверка на true или false значение, значения 'string' и 5 являются true и получаем результат 'условие выполнилось'. 0 и null это false значения и получаем 'условие не выполнилось'. Еще если бы строка была пустой '' тоже было бы 'условие не выполнилось', правильно поняла?

проверка на четность с тернарным оператором.

$z=11;
 echo $z % 2== 0 ? 'число четное': 'число не четное';

проверка на четность с помощью if.

$v =10;
 if ($v%2==0){
     echo 'число четное';
 } else {
     echo 'число не четное';
 }
ivashkevich

Всё отлично

lenapetrowa92@gmail.com

спасибо )

AlexNew

Здравствуйте! Какой-то странный этот оператор switch. В нём отсутствует логика?


Пример 1.

Посмотрите, пожалуйста, код:

$var = 1;
      switch ($var)
   {
    case 1:
        case 2:
            echo "Условие выполнено <br>"; break;
    case 3:
        echo "Условие не выполнено <br>"; break;
    default:
    echo "Просто по умолчанию <br>";
   }

Результат выполнения:

Условие выполнено

Почему? Ведь если он заходит с проверкой в case 1 и ничего там не находит, то он вообще ничего не должен выводить. По логике так. Если ничего нет, то ничего и не выводится. Почему вместо этого он выводит то, что стоит в case 2?


Пример 2.

Теперь мы убираем "брейки". Получаем такой код:

$var = 1;
      switch ($var)
   {
    case 1:
        case 2:
            echo "Условие выполнено <br>";
    case 3:
        echo "Условие не выполнено <br>";
    default:
    echo "Просто по умолчанию <br>";
   }

Результат выполнения:

Условие выполнено
Условие не выполнено
Просто по умолчанию

Почему? Ведь если $var = 1, то должно выполниться только то, что относится к case 1, а вместо этого выполняется всё подряд: и case 1, и case 2, и case 3, и даже default! Где логика?

Спасибо за ответ!

ivashkevich

Почитайте документацию. Можно для одного и того же действия перечислить несколько case-ов. Для этого они перечисляются подряд, как у вас и сделано. Если хотите, чтобы в первом case ничего не выполнялось, надо в нем поставить break.

AlexNew

Спасибо Вам за ответ. Давайте я введу для себя правило, чтобы в будущем сразу ему следовать. :)

Если проверка switch заходит хотя бы в один case, то проверка условий во всех остальных case, а также в default не выполняется.

Это значит, что если нет окончания оператора switch с помощью break, то оператор switch продолжит своё выполнение с заходом во все другие части case и в часть default без проверки, то есть вне зависимости от значения выражения, написанного в скобках switch (). Такие заходы будут выполняться, пока не произойдёт одно из двух: будет обнаружен break, либо оператор switch подойдёт к концу, выполнив все части case и default.

Это правильно?

ivashkevich

Вроде правильно) Но как-то сложно. Правильная и простая формулировка есть в официальной документации.

AlexxxEy

Задание 1.
Значения 'string' и 5 являются для условия true.
Значения 0 и null как false.

Задание 2.

$c = 2;
$x = $c % 2 == 0 ? print "Число $c четное." : print "Число $c не четное.";
ivashkevich

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

print $x = $c % 2 == 0 ? "Число $c четное." : "Число $c не четное.";

Результат тернарного оператора возвращается. Его можно и в переменную присвоить. А выполнять вывод внутри самого оператора не нужно.

ChelovekAndrey

Сносно?

<?php
                $string='Good morning';
                echo 'Ваш личный помощник: <br>';
                if ($string === 'Good morning') {
                    echo $string . ', my friend';
                } else {
                    echo 'Go back, and sleep, bro';
                };

                echo '<br><br>';

                $payBack = 0;
                echo 'Сообщение от Банка <br>';

                if ($payBack == 0) {
                    echo 'Ваш долг уплачен, и равен ' . $payBack . '$';
                } elseif ($payBack < 0) {
                    echo 'Мы скоро вернем, честно.';
                } else {
                    echo 'Ваш долг равен ' . $payBack. '$';
                };

                echo '<br><br>';

                $x = null;
                echo 'Я правильно всё понял? <br>';
                if ($x == null) {
                    echo 'Совершенно верно!';
                } else {
                    echo 'Что-то тут не так, почему у тебя переменная $x имеет значение (' . $x . ')? Ознакомься с заданием.';
                };
                echo '<br><br>';

                $y = 5;
                echo 'Сколько будет 2+3? <br> ';

                switch ($y) {
                    case 5:
                        echo $y . ' - Правильно! А ты силен в математике!';
                        break;
                    case $y < 5 or $y > 5:
                        echo 'Попробуй другое число, это точно не ' . $y;
                        break;
                    default:
                        echo 'Вообще мимо';
                };

                echo '<br><br> А число ' . $y . ' какое? <br>';

                $num = $y % 2 == 0 ? 'Четное!' : 'Нечетное!';

                echo $num;

                ?>
ivashkevich

Хорошо

109-kz@mail.ru
<?php
$x=4;
echo $x%2==0?" Число четное":" Число нечетное";
?>
ivashkevich

Отлично

Vladimir96
//ДЗ
//Проверил операторы
    if ('string') {echo 'Условие выполнилось';}//в условии true, условие выполнилось
    if (0) {echo 'Условие выполнилось';}//условие false, поэтому ничего не вывел
    if (null) {echo 'Условие выполнилось';}//условия не существует, поэтому ничего не вывел
    if (5) {echo 'Условие выполнилось';}//в условии true, условие выполнилось

//Четность числа
    $searchEvenNumber = 423533;
    $resultEvenNumber = $searchEvenNumber % 2 == 0 ? 'Число четное': 'Число не четное';
    echo $resultEvenNumber;
ivashkevich

Отлично

Ooleg
<?php
if ('string') {echo 'Условие 1 выполнилось';echo '</br>';}

if (0) {echo 'Условие 2 выполнилось';echo '</br>';}

if (null) {echo 'Условие 3 выполнилось';echo '</br>';}

if (5) {echo 'Условие 4 выполнилось';echo '</br>';}

$x = 13;
echo $x % 2 == 0 ? 'Число ' . $x . ' чётное' . '</br>': 'Число ' . $x . ' нечётное' . '</br>';

?>
ivashkevich

Отлично

romaartemov1999@gmail.com
<?php
$w = 4;
$mod = $w % 2 == 0 ? $w=1 : $w = 0;
if($w){
    echo "Число четное";
}else{
    echo "Число нечетное";
}
ivashkevich

Неправильно используется тернарный оператор. В правой части не должно быть никаких присваиваний. Нужно использовать результат, который получился в переменной mod

Fail
$x = readline();

echo $x % 2 === 0 ? 'Четное' : 'Не четное';
ivashkevich

Отлично

Floppy
<?php
$x = 13;
$isEven = $x % 2 === 0;
var_dump($isEven);
if ($isEven) {
    echo 'Четное';
} else {
    echo 'Нечетное';
}
ivashkevich

Надо было через тернарку

Floppy

Так в 3 строке используется

$isEven = $x % 2 === 0;
// тоже самое что и 
$isEven = $x % 2 === 0 ? true : false;
ivashkevich

Тернарка не используется ведь. Используется результат логического И. Но никакой тернарки нет. А в задании есть. Привыкайте делать задачи по заданию. В работе пригодится.

H3licoptero
if ('string') {
    echo 'Условие выполнилось';  // - привело к true т.к. 'string' является строкой(ненулевое 
                                      значение);
}
echo '<br>';

if(0) {
    echo 'Условие выполнилось';
} else {
    echo 'Условие не выполнилось';  //- получилось false т.к. нулевое число = false; 
}
echo '<br>';

if (null) {
    echo 'Условие выполнилось';
} else {
    echo 'Условие не выполнилось'; - значение false, потому что null = 0(но это неточно));
}
echo '<br>';

if (5) {
    echo 'Условие выполнилось';   - true, т.к. 5 это ненулевое значение;
}
echo '<br>';

$x = 2;

$x = $x % 2 == 0 ? 'Число чётное' : 'Число нечётное';

echo $x;

Число чётное
ivashkevich

Отлично

dliashchenko
 if ("string") {
    echo "Условие выполнилось"; // 'string' это строка соответственно TRUE
}
 else {
     echo "Условие не выполнилось";
}
echo "<br/>";
 if (0)
{
    echo "Условие выполнилось";
}
 else {
     echo "Условие не выполнилось"; //  0 это FALSE
 }
echo "<br/>";
 if (null)
 {
     echo "Условие выполнилось";
 }
 else {
     echo "Условие не выполнилось"; // null это FALSE
 }
echo "<br/>";
 if (5)
 {
     echo "Условие выполнилось"; // 5 это число соответственно TRUE
 }
 else {
     echo "Условие не выполнилось";
 }
 echo "<br/>";

$a = 43;
$b = $a%2 == 0 ? "четное" : "нечетное";
echo "$b";
ivashkevich

Отлично

zuxarevaalina88@gmail.com
<?php
$x = -6;

echo ($x %2 == 0) ?  'число четное' : 'число не четное';

?>
ivashkevich

Отлично

NrG
if ('string') { // Вернет true потому что строка не пустая
    echo 'Условие выполнилось' . '<br>';
}
if (0) { // Вернет false, т.к. любое число кроме 0 вернет true
    echo 'Условие выполнилось';
}
if (null) { // Вернет false, потому что null не имеет значения
    echo 'Условие выполнилось';
}
if (5) { // Вернет true, т.к. любое число кроме 0 вернет true
    echo 'Условие выполнилось' . '<br>';;
}
$x = 2;
echo ($x % 2 == 0) ? 'Число '. $x . ' четное' : 'Число '. $x . ' нечётное';
ivashkevich

Супер

anton-gogo@mail.ru
<?php

$x= 'string';

if ($x == 'string') {
    echo 'Условие выполнилось';
}else {
    echo 'Условие не выполнилось';
}
echo '<br>';
if ($x == 0) {
    echo 'Условие выполнилось';
}else {
    echo 'Условие не выполнилось';
}
echo '<br>';
if ($x == 'null') {
    echo 'Условие выполнилось';
}else {
    echo 'Условие не выполнилось';
}
echo '<br>';
if ($x == 5) {
    echo 'Условие выполнилось';
}else {
    echo 'Условие не выполнилось';
}
echo '<br>';

$mod = $x % 2 == 0 ? $x= 'Число четное' : $x= 'Число нечетное';

echo $mod;

x=string
Условие выполнилось
Условие выполнилось
Условие не выполнилось
Условие не выполнилось
Число четное
x=0
Условие не выполнилось
Условие выполнилось
Условие не выполнилось
Условие не выполнилось
Число четное
x=null
Условие не выполнилось
Условие выполнилось
Условие выполнилось
Условие не выполнилось
Число четное
x=5
Условие не выполнилось
Условие не выполнилось
Условие не выполнилось
Условие выполнилось
Число не четное

ivashkevich

Неправильно используется тернарный оператор.

$x= 'Число четное' 

Этим действием вы переопределили значение переменной $x, а потом уже присвоили её значение переменной $mod.

Вам же нужно было только на основании значения переменной x присвоить значение переменной mod.

anton-gogo@mail.ru
<?php 

$mod = $x % 2 == 0 ? 'Число четное' : 'Число нечетное';

echo $mod;

Вот так?

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