$a = 'a'; echo isset($a['b']); 
Этот код возвращает 1. Почему?
Символы String могут ссылаться на их смещение, используя синтаксис, например $ a [0] для первого символа, например
 $string = 'Hello'; echo $string[1]; // echoes 'e' 
  поэтому PHP распознает, что $ a является строкой;  отбрасывая «b» на числовое значение (которое отличает 0) и пытается проверить isset на $ a [0], что является первым символом a 
Хотя это также должно вызывать предупреждение о недопустимом смещении 'b', если у вас есть ошибки
РЕДАКТИРОВАТЬ
 $a = 'a'; echo isset($a['b']), PHP_EOL; echo $a['b']; 
PHP 5.3
 1 a 
PHP 5.4
 Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6 a 
PHP 5.5
 PHP Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6 Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6 a 
Только для php 5.3:
поэтому давайте сделаем это медленно:
 $a['b']; 
возвращает 'a', потому что b преобразуется в 0 и $ a [0] (первый символ 0 = a)
 isset($a['b']); 
return true, потому что $ a ['b'] является 'a' не null
 echo true; 
выдает «1», потому что true преобразуется в строку, а это – в «1».
потому что ISSET возвращает 1, если значение установлено.
Используйте его так:
 if(isset($a['b']){ echo $a['b']; } 
По той же причине, что и …
 echo true; 
PHP не может повторять нестрочный / нецелый, поэтому он преобразует true в 1 и 0 для false.
 <?php $a = 'a'; var_dump($a); ?> it will gives output string(1) "a" if you will echo $a['b'] it will give you output as a so $a['b'] also has value hence <?php $a = 'a'; echo isset($a['b']); ?> outputs value 1