Две переменные одинаковы, но не равны. Почему?

12
AG
На сайте с 24.04.2007
Offline
115
1042

Есть переменная $a=1.3333333.

Есть массив $mas состоящий из записей вида "1.3333333-1", "2.55555555-2", "1.65421433-3" и т.д.

Пытаюсь вытащить из $mas цифру после "-", при совпадающей с $a начальной цифрой.

Пишу:


foreach($mas as $b)
{
$mas_explode=explode("-", $b);
if($a==$mas_explode[0]) { $c=$mas_explode[1]; }
}

Но при совпадающих $a и $mas_explode[0] они не равны, $c остается пуста.

Возможно, оттого что $a это число, а $mas_explode[0] строковая переменная. Пробовал преобразовать их с помощью $mas_explode[0]=(double)$mas_explode[0]; ничего не изменилось.

Кто виноват и что делать?

T
На сайте с 21.08.2009
Offline
3
#1

а точно не работает?

$a=1.3333333;

$mas = array('1.3333333-1', '2.55555555-2', '1.65421433-3');
foreach($mas as $b)
{
$mas_explode=explode("-", $b);
if($a==$mas_explode[0]) { echo $mas_explode[1]; }
}

отлично вывело 1

AG
На сайте с 24.04.2007
Offline
115
#2

Ну вот в том-то и дело, что точно не работает.

Вот результат:


3.33333333333=3.33333333333-->
3.33333333333=2.33333333333-->
3.33333333333=2-->
S
На сайте с 13.07.2007
Offline
56
#3

Выведите разницу $mas_explode[0] - $a

AG
На сайте с 24.04.2007
Offline
115
#4
solnikolay:
Выведите разницу $mas_explode[0] - $a

Ну вот постом выше я и вывел значения $a = $mas_explode[0] --> $c. Или что вы имеете ввиду?

kuzjma
На сайте с 07.12.2008
Offline
24
#5

попробуйте

if($a===$mas_explode[0])

тройное равно должно автоматически преобразовать переменные к одному типу, если мне не изменяет память :)

Серверный скрипт проверки показателей (/ru/forum/451837)
AG
На сайте с 24.04.2007
Offline
115
#6
kuzjma:
попробуйте
if($a===$mas_explode[0])

тройное равно должно автоматически преобразовать переменные к одному типу, если мне не изменяет память :)

Не поверите, пробовал уже)))

Нашел способ через strcmp($a, $mas_explode[0]), работает.

Но так и не понял, почему в том виде, в котором было, не работало.

ewg777
На сайте с 04.06.2007
Offline
225
#7
AlexGM:
Не поверите, пробовал уже)))

Нашел способ через strcmp($a, $mas_explode[0]), работает.
Но так и не понял, почему в том виде, в котором было, не работало.

http://www.blueshoes.org/en/developer/php_cheat_sheet/ - дело в способе сравнения.

S
На сайте с 13.07.2007
Offline
56
#8
ewg777:
http://www.blueshoes.org/en/developer/php_cheat_sheet/ - дело в способе сравнения.

Хммм, тем более странно, что ТС сравнивал float и string через "==" - в приведенной вами таблице этому соответствует true.

AlexGM, имею ввиду $mas_explode[0] - $a, а не $a = $mas_explode[0] --> $c :)

AG
На сайте с 24.04.2007
Offline
115
#9
solnikolay:


AlexGM, имею ввиду $mas_explode[0] - $a, а не $a = $mas_explode[0] --> $c :)
3.33333333333=3.33333333333-->
3.33333333333=2.33333333333-->
3.33333333333=2-->

При вычитании


3.33333360913E-12
1
1.33333333333
[Удален]
#10

дайте все исходники, я покажу истину.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий