@chernousovkgb

Почему не работает в case сравнение нуля и единицы?

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

spoiler
<?php

//объявляем переменные
$peremennaya1=2; //присвоили числовое значение 
$peremennaya2=2; //присвоили числовое значение 
$peremennayapolz=$_GET['peremennayapolz']; // переменную должен задать пользователь

switch ($peremennayapolz) {  
    case $peremennayapolz < $peremennaya1:  //  работает если пользователь задает значение переменной "1", а если задает значение "0" то почему то выводит значение, что переменная пользователя равна переменной1 (0=1) как???
      echo "Задуманное число не входит в числовой ряд";
   break;
    case $peremennaya1 == $peremennayapolz: // все работает
      echo "Переменная пользователя равна переменной 1<br>";
  break;
    case $peremennayapolz > $peremennaya1: // все работает
      echo "Переменная пользователя больше";
  break;
   case $peremennayapolz == null: // изучив гугл и прикинув решил надо бы вообще проверить на отсутствие значения переменной и это не работает.
      echo "Задай переменную";
  break;
  
}


?>



Дополнительные вопросы.

Как выполнять switch только при условии если пользователь задал переменную ?
  • Вопрос задан
  • 263 просмотра
Решения вопроса 1
@Yan-s
Почитайте ка php.net/manual/ru/control-structures.switch.php и обратите внимание на примеры.

Этот оператор сравнивает switch (то что тут) и case (то что здесь) между собой. Представленный вариант использования просто не корректен.

Если в $peremennayapolz у вас ноль, то во втором случае получается сравнение этого ноля с результатом выражения
$peremennaya1 == $peremennayapolz. Выражение дает false, а false == 0.

Как по мне, то лучше перепишите на if elseif php.net/manual/ru/control-structures.elseif.php

Как вариант схитрить и написать switch (true) ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ynblpb_spb
дятел php
//объявляем переменные
$peremennaya1=2; //присвоили числовое значение 
$peremennaya2=2; //присвоили числовое значение 
if (isset($_GET['peremennayapolz'])){
	$peremennayapolz = intval($_GET['peremennayapolz']);

	switch ($peremennayapolz) { 
		case $peremennayapolz < $peremennaya1:
			echo "Задуманное число не входит в числовой ряд";
		break;
		case $peremennaya1 == $peremennayapolz: // все работает
			echo "Переменная пользователя равна переменной 1";
		break;
		case $peremennayapolz > $peremennaya1: // все работает
			echo "Переменная пользователя больше";
		break;
		default: 
			echo "Задай переменную";
		break;
	}
}
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Преобразование типа intval()
2. Сравнение типов: php.net/manual/ru/types.comparisons.php
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы