Edit report at https://bugs.php.net/bug.php?id=61042&edit=1
ID: 61042 Comment by: vigano dot n at clxeurope dot com Reported by: vigano dot n at clxeurope dot com Summary: unserialize issue Status: Duplicate Type: Bug Package: Arrays related Operating System: Linux Centos PHP Version: 5.3.10 Block user comment: N Private report: N New Comment: A possible workaround is serializing and unserializing again. Look at this piece of code: $arr = (object)array("value0", "value1"); $uns = unserialize(serialize((array)unserialize(serialize($arr)))); var_dump($uns); var_dump(isset($uns["0"])); var_dump(isset($uns[0])); var_dump(isset($uns["1"])); var_dump(isset($uns[1])); The result is: array(2) { [0]=> string(6) "value0" [1]=> string(6) "value1" } bool(true) bool(true) bool(true) bool(true) This definitively confirm my idea that bug #55798 has nothing to do with this issue. Previous Comments: ------------------------------------------------------------------------ [2012-02-10 12:22:19] vigano dot n at clxeurope dot com In addition, to be honest I don't believe hat this problem "is that these strings are not converted to numbers when casting to an array". The following code, where conversion is not required, doesn't work as well: $arr = (object)array("value"); $uns = (array)unserialize(serialize($arr)); var_dump($uns); var_dump(isset($uns["0"])); result: array(1) { ["0"]=> string(5) "value" } bool(false) ------------------------------------------------------------------------ [2012-02-10 12:14:09] vigano dot n at clxeurope dot com Anyway the problem affects only unserialized and cast objects. The following code works properly also with PHP 5.3.9/10: $arr1 = array("0" => "string"); var_dump(isset($arr1["0"])); var_dump(isset($arr1[0])); returning: bool(true) bool(true) ------------------------------------------------------------------------ [2012-02-10 12:01:19] cataphr...@php.net The bug is not in unserialize; the object is correctly unserialized, with the rule that objects only have string properties correctly enforced (this was not enforced before 5.3.9 though: see bug #55798). The problem is that these strings are not converted to numbers when casting to an array. This is a known problem and unfortunately the main opinion seems to be this ought not to be fixed due to performance issues. ------------------------------------------------------------------------ [2012-02-10 11:47:47] vigano dot n at clxeurope dot com Description: ------------ It seems that, using PHP 5.3.9/10, an unserialized object is not properly cast to array. Test script: --------------- The following code gives different results using PHP 5.3.8 and PHP 5.3.9/10: $arr = (object)array("value"); $uns = (array)unserialize(serialize($arr)); var_dump($uns); var_dump(isset($uns[0])); Expected result: ---------------- Using PHP 5.3.8: array(1) { [0]=> string(5) "value" } bool(true) Actual result: -------------- Using PHP 5.3.9/10: array(1) { ["0"]=> string(5) "value" } bool(false) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=61042&edit=1