#45959 [Opn->Csd]: Object to array conversion leads to weird behaviour
ID: 45959
Updated by: vrana@php.net
Reported By: manchokapitancho at gmail dot com
-Status: Open
+Status: Closed
Bug Type: Documentation problem
Operating System: windows xp
PHP Version: 5.2.6
New Comment:
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
"integer properties are unaccessible" at
http://www.php.net/manual/en/language.types.array.php#language.types.array.casting
Previous Comments:
------------------------------------------------------------------------
[2008-11-05 07:53:57] kalle@php.net
You could always use the 'assoc' parameter on the json_decode()
function to avoid this completely:
$input =
json_decode('{"is_paid":{"0":"4","1":"3"},"is_bank_transfer":{"4":"1"}}',
true);
$arr = $input['is_bank_transfer'];
var_dump($arr);
var_dump($arr[4]);
var_dump($arr['4']);
$keys = array_keys ($arr);
var_dump($keys);
var_dump($arr[$keys[0]]);
:)
------------------------------------------------------------------------
[2008-11-04 08:18:08] manchokapitancho at gmail dot com
Isn't this problem quite a serious issue since JSON data transfer
mechanism is growing in popularity and manipulating a JavaScript (or
JSON) key/value object as a PHP array is a common use case?
------------------------------------------------------------------------
[2008-11-03 21:56:41] felipe@php.net
Fixing that implies a perfomance decrease, hence the better seems be
keep it as an known issue, but documented.
------------------------------------------------------------------------
[2008-08-31 13:53:10] manchokapitancho at gmail dot com
Also array_key_exists returns false instead of true.
------------------------------------------------------------------------
[2008-08-31 13:52:29] manchokapitancho at gmail dot com
Description:
------------
Object to array conversion leads to weird behaviour - access to array
members is not possible.
Reproduce code:
---------------
$input = json_decode
('{"is_paid":{"0":"4","1":"3"},"is_bank_transfer":{"4":"1"}}');
$arr = ((array)$input->is_bank_transfer);
var_dump($arr);
var_dump($arr[4]);
var_dump($arr['4']);
$keys = array_keys ($arr);
var_dump($keys);
var_dump($arr[$keys[0]]);
Expected result:
----------------
array(1) {
["4"]=>
string(1) "1"
}
string(1) "1"
string(1) "1"
array(1) {
[0]=>
string(1) "4"
}
string(1) "1"
Actual result:
--------------
array(1) {
["4"]=>
string(1) "1"
}
NULL
NULL
array(1) {
[0]=>
string(1) "4"
}
NULL
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45959&edit=1
Thread (4 messages)