[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: switch-case
AnDer
Добрый день .Заранее благодарен за помощь

Собственно код не понимаю почему не корректно работает



$a=0;
switch($a)
{
case'not_add':
$info = 'not_add';
break;

case'new_add':
$info = 'new_add';
break;


default:
$info ='default';
break;
}

echo $info;

// result not_add


Выдает первое значение а не по дефаулту
даже если добавить
		case'0':
$info = '0000';
break;


ничего не меняется выдаст not_add . Тесть любое первое значение
может я чегото не понимаю ?



Спустя 10 минут, 3 секунды (2.02.2011 - 22:34) @dmir@l написал(а):
вот код:

$a=1;
switch($a)
{
case'1':
$info = 'Выводит 1';
break;

case'2':
$info = 'Выводит 2';
break;


default:
$info ='0';
break;
}

echo $info;

// result 1


выводит по дуфаулта если ни один вариант не подходит

Спустя 4 минуты, 5 секунд (2.02.2011 - 22:38) Invis1ble написал(а):
да, инклуд там вроде как лишний )

Спустя 4 минуты, 49 секунд (2.02.2011 - 22:43) @dmir@l написал(а):


$a="";
switch($a)
{
case'Webmoney':
$info = 'Оплата товара с помощью Webmoney!';
break;

case'Яндекс Деньги':
$info = 'Оплата товара с помощью Яндекс Деньги!';
break;


default:
$info ='Не выбрали способ оплаты';
break;
}

echo $info;

Спустя 15 минут, 1 секунда (2.02.2011 - 22:58) AnDer написал(а):
Спасибо конечно ... но !

Проблема в том что одно из значений $a это ноль . Да если бы не принимало проблем бы не было. Яж из кода выдирал вырвал поэтому значения изменить не могу точнее очень много переписывать.
Это косяк самой конструкции такой что ли ?
Ладно придется делать лажу запихну внутрь if эту switch-case.

Если у когото ещё возникнут светлые мысли будьте добрые поделиться ими.

Спустя 4 минуты, 16 секунд (2.02.2011 - 23:02) @dmir@l написал(а):
конструкцию switch-case используют чтобы не писать по многу раз условие if-else

Спустя 6 минут (2.02.2011 - 23:08) AnDer написал(а):
Цитата (@dmir@l @ 2.02.2011 - 20:02)
конструкцию switch-case используют чтобы не писать по многу раз условие if-else

Да я знаю что используют для того чтобы не писать по многу if

Да нет я запихну во внутрь чтобы if делала проверку переменная $a нулю . поменяю дефаулт тогда. Потому что входные значения трогать не хочу.

Реально мой Switch case содержит 25 вариантов просто бес мысленно его выкладывать весь.


if($a !=0)
{
$a="";
switch($a)
{
case'not_add':
$info = 'not_add';
break;

case'new_add':
$info = 'new_add';
break;

default:
$info ='default';
break;
}

echo $info;
}
elese
{
$info ='';
}

чтото типа такого т.к. пока другово выходы не вижу

Спустя 1 минута, 28 секунд (2.02.2011 - 23:10) @dmir@l написал(а):
смотри если прилетает переменная со значением нуль, то должен делать свое дело параметр дефаулт..

например, выберите способ оплаты, пользователь кликает на нужный способ (либо вебмани либо яндекс и эта переменная лити в обработчик..в данном случае в этот код...где судя по значению переменной выберается нужный параметр и выводится соответствующее параметру сообщение либо действие..кому как угодно..

Спустя 36 секунд (2.02.2011 - 23:11) Invis1ble написал(а):
AnDer
<?php

$a = 0;

$a = strval($a);

switch ($a)
{
case 'not_add' :
$info = 'not_add';
break;

case 'new_add' :
$info = 'new_add';
break;

default :
$info = 'default';
break;
}

echo $info;

Спустя 4 минуты, 57 секунд (2.02.2011 - 23:15) AnDer написал(а):
ОО спасбо Invis1ble помогло. И тебе спасибо @dmir@.
Я так понял на добыло к одному типу переменные привести.
Спасибо можно тему закрыть.

Спустя 32 секунды (2.02.2011 - 23:16) @dmir@l написал(а):
Цитата (Invis1ble @ 2.02.2011 - 20:11)
AnDer
<?php

$a = 0;

$a = strval($a);

switch ($a)
{
case 'not_add' :
$info = 'not_add';
break;

case 'new_add' :
$info = 'new_add';
break;

default :
$info = 'default';
break;
}

echo $info;

это не совсем то что нужно

Спустя 1 минута, 54 секунды (2.02.2011 - 23:18) @dmir@l написал(а):
AnDer окей

Спустя 10 секунд (2.02.2011 - 23:18) Invis1ble написал(а):
@dmir@l
Цитата
это не совсем то что нужно

нужно кому? ) почему?
ТС говорит, что подходит...

Спустя 4 минуты, 2 секунды (2.02.2011 - 23:22) AnDer написал(а):
Цитата (@dmir@l @ 2.02.2011 - 20:10)
смотри если прилетает переменная со значением нуль, то должен делать свое дело параметр дефаулт..

например, выберите способ оплаты, пользователь кликает на нужный способ (либо вебмани либо яндекс и эта переменная лити в обработчик..в данном случае в этот код...где судя по значению переменной выберется нужный параметр и выводится соответствующее параметру сообщение либо действие..кому как угодно..

Угу только вот не работает по другому. Я б с удовольствием написал как короче и правильнее но ведь не работает ? . Значит что то самой функции не нравится тог чего я не знаю. Возможно нужен один тип переменных чтобы был или чтобы на входе было переменные в виде строки если хоть одно значение может быть строкой. Пойду ещё манул почитаю что то я пропустил чтоли.

Спустя 3 минуты, 51 секунда (2.02.2011 - 23:26) Invis1ble написал(а):
AnDer
не понял.... вариант, предложенный мной не работает?

Спустя 2 минуты, 15 секунд (2.02.2011 - 23:28) AnDer написал(а):
Цитата (Invis1ble @ 2.02.2011 - 20:26)
AnDer
Invis1ble
не понял.... вариант, предложенный мной не работает?

Работает все ок smile.gif . просто я хотел знать почему @dmir@l считает что неправильно так вот и всё

Спустя 30 минут, 4 секунды (2.02.2011 - 23:58) @dmir@l написал(а):
AnDer вся проблема в том, что ты плохо излагаешь суть проблемы..попробуй нам объяснить, чтобы мы поняли тебя..ну так сразу и говорил что тебе нужно строковое значение

Спустя 11 минут, 28 секунд (3.02.2011 - 00:10) AnDer написал(а):
Цитата (@dmir@l @ 2.02.2011 - 20:58)
AnDer вся проблема в том, что ты плохо излагаешь суть проблемы..попробуй нам объяснить, чтобы мы поняли тебя..ну так сразу и говорил что тебе нужно строковое значение


Эм да откуда я мог знать что Swicth case нужно строковое значение. У меня просто переключатель не работал. По факту не работал вот всё не выдавал значений default-a если переменная $a была ноль. Да я понимаю что должен был работать но ведь не работает если не привести значение к строковому типу.Я раз пять мануал тот что у меня на руках прочёл но в нём ни слова о таком фокусе. Да да я нуб ничего с этим не поделать пока не научусь большему.

Виноват постараюсь в следующий раз изложить по понятней проблему.

Спустя 7 минут, 1 секунда (3.02.2011 - 00:17) @dmir@l написал(а):
wink.gif

Спустя 1 минута, 16 секунд (3.02.2011 - 00:18) Invis1ble написал(а):
AnDer
да ладно, все норм ) я вот тоже например не сразу сообразил, в чем проблема ))

Спустя 9 часов, 16 минут, 19 секунд (3.02.2011 - 09:34) linker написал(а):
<?php
$a = 0;
switch ((string)$a)
{
case 'not_add' : $info = 'not_add'; break;
case 'new_add' : $info = 'new_add'; break;
default : $info = 'default'; break;
}
echo $info;
?>
Все проблема в том, что если сравнивается число со строкой, то PHP всегда приводит строку к численному значению. Отсюда видно, что раз переменная $a - это число, то первое сравнение ее со значением not_add приведет к преобразованию этого значение к числу, в результате получает not_add -> 0. 0 == 0, а значит условие верно и $info получает значение not_add.

Спустя 5 часов, 28 минут, 12 секунд (3.02.2011 - 15:03) AnDer написал(а):
Спасибо linker познавательно буду знать. Заодно код подправлю.

Спустя 3 часа, 3 минуты, 3 секунды (3.02.2011 - 18:06) @dmir@l написал(а):
Цитата (linker @ 3.02.2011 - 06:34)
Все проблема в том, что если сравнивается число со строкой, то PHP всегда приводит строку к численному значению. Отсюда видно, что раз переменная $a - это число, то первое сравнение ее со значением not_add приведет к преобразованию этого значение к числу, в результате получает not_add -> 0. 0 == 0, а значит условие верно и $info получает значение not_add.

верно глаголит wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.