то ли лыжи не едут, то ли я ****. поясните по коду php

RO
На сайте с 13.07.2009
Offline
88
409

<?php
$status=array(
'all'=>'ololo',
0=>'ululu',
1=>'atata',
2=>'kokoko');
$current='all';
foreach ($status as $key=>$value){
echo "key => {$key} (".gettype($key)."), current => {$current} (".gettype($current).")\n";
var_dump($current==$key);
echo "\n";
}

вывод


key => all (string), current => all (string)
bool(true)

key => 0 (integer), current => all (string)
bool(true)

key => 1 (integer), current => all (string)
bool(false)

key => 2 (integer), current => all (string)
bool(false)

как же так? integer==string :confused:

дани мапов
На сайте с 06.09.2012
Offline
204
#1

Используйте ===

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
rbbumfirst
На сайте с 03.04.2009
Offline
87
#2

приведение типов.try this "==="

Web developer (http://rudov.com). разработка на Go, ReactJS, React Native
RO
На сайте с 13.07.2009
Offline
88
#3
дани мапов:
Используйте ===

это понятно, я не могу понять почему происходит то, что я написал выше, ведь я не сравниваю "0" и 0, я сравниваю строку, которая по всем параметрам, включая тип, отличается от ключа 😕

---------- Добавлено 21.02.2013 в 17:52 ----------

rbbumfirst:
приведение типов.try this "==="

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

почему в данной ситуации 'all'==0 возвращает истину.

просто var_dump('all'==0) => false;

в цикле, как показано выше, var_dump('all'==0) => true;

---------- Добавлено 21.02.2013 в 18:00 ----------

сижу как дурак, уже несколько часов. и не пойму почему так происходит. впервые такое встречаю за все мои годы программирования. может я баг в php нашел? писать багреппорт? :D

PHP 5.3.10-1ubuntu3.5 with Suhosin-Patch (cli) (built: Jan 18 2013 23:45:59)

дани мапов
На сайте с 06.09.2012
Offline
204
#4

У вас просто строка с 0 сравнивается http://webonrails.ru/forum/php/topic/651/

RO
На сайте с 13.07.2009
Offline
88
#5
дани мапов:
У вас просто строка с 0 сравнивается http://webonrails.ru/forum/php/topic/651/

весёлые люди, эти разработчики php 😂

gormarket
На сайте с 29.12.2010
Offline
47
#6

Происходит преобразование к одному типу при сравнении

var_dump($current==$key)

строка $current преобразуется в число, если $key число

получается 0==0

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#7

Самое НАШЕ;)

Подпись))

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