Чудеса с isset и if

Армян

Новичок
Чудеса с isset и if

Здрасьте!

Да переместят меня в оффтоп, если не там запостил ;)

Я вот тут, сталкнулся с такой фиговиной, чесно говоря в шоке.

есть скрипт:
PHP:
<?php
$data = '123';
print_r($data);
echo "+";
if ( isset($data['Start_Month']) and isset($data['Start_Day']) and isset($data['Start_Year']) and
    isset($data['End_Month']) and isset($data['End_Day']) and isset($data['End_Year']) ) {
print_r($data);
}
?>

выдает:
123+123

Извиняюсь, если чужь, но isset($data['Start_Month']), и все Иссеты в данном случае, должны возвращять false, или я ошибаюсь ?
 

Армян

Новичок
откуда?? когда $data === '123', или первый симол.. хм.. ладно..

а
как это ? бред, почему инт, если стринг :-О

-~{}~ 26.08.07 01:32:

isset($data[strval("Start_Month")]) - тоже самое

-~{}~ 26.08.07 01:36:

люди! как сказано выше, я "немного" в шоке:) Как это нормально обойти ?
 

itprog

Cruftsman
Армян
объяснили уже же, т.к. $data['Start_Month'] это не индекс массива, а offset строки, то 'Start_Month' превращается в число, т.е. 0
нормально обойти = проверка на is_array
 

tony2001

TeaM PHPClub
>откуда?? когда $data === '123', или первый симол.. хм.. ладно..
вот-вот.

>>(int)'Start_Month' === 0
>как это ? бред, почему инт, если стринг :-О
ты тормоз?
var_dump((int)'Start_Month');

>isset($data[strval("Start_Month")]) - тоже самое
какая разница?
хоть два раза strval()

>люди! как сказано выше, я "немного" в шоке Как это нормально обойти ?
что обойти?
ты берешь строковый индекс от строки и на что ты рассчитываешь?
не догадался проверить - в массив ли это вообще?
 
Сверху