Bug #52194 [Bgs]: incorrect behaviour when printing non existend array index

From: Date: Sat, 26 Jun 2010 18:28:02 +0000
Subject: Bug #52194 [Bgs]: incorrect behaviour when printing non existend array index
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-151897@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=52194&edit=1 ID: 52194 User updated by: bubi1 at mailinator dot com Reported by: bubi1 at mailinator dot com Summary: incorrect behaviour when printing non existend array index Status: Bogus Type: Bug Package: *General Issues Operating System: all PHP Version: 5.3.2 New Comment: Yes, you are righ, i have found that. "Warning [...] Non-integer types are converted to integer. [...]" However i find this behavior a bit strange. If the string is an array, it should behave as an array, and generate an error on a non existend key. Otherwise, if do not know if $arr is a string or array, i have to use 3 functions for checking the existence of a value: is_array($arr) && array_key_exists('smth', $arr) && isset($arr['smth']), when i could simply use isset($arr['smth']) if things worked as expected. But ok, nevermind. A documented bug is a feature :) Sorry for opening this thread. Previous Comments: ------------------------------------------------------------------------ [2010-06-26 19:56:41] dtajchreber@php.net Because non-integer keys are converted to integers. Everything is explained here: http://www.php.net/manual/en/language.types.string.php ------------------------------------------------------------------------ [2010-06-26 19:44:45] bubi1 at mailinator dot com Yes, i know that a string is an array of chars. Maybe i'm wrong,but i remember once only the syntax $string{0} was working, non $string[0] also. Anyway, why this works? php -r '$arr = 'test';var_dump($arr['rasmus']);' still prints "t". There is no key called "rasmus" in the $arr string... ------------------------------------------------------------------------ [2010-06-26 19:12:01] rasmus@php.net A string is an array of characters. You have: $arr[0] = "test"; Therefore array index 0 on that string is: $arr[0][0] which very logically is "t" ------------------------------------------------------------------------ [2010-06-26 18:29:04] bubi1 at mailinator dot com Description: ------------ The code below is self explaining. Test script: --------------- php -r '$arr = array('test');var_dump($arr[0][0]);var_dump(isset($arr[0][0]));' Expected result: ---------------- NULL bool(false) Actual result: -------------- string(1) "t" bool(true) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52194&edit=1

« previous php.bugs (#151897) next »