Edit report at http://bugs.php.net/bug.php?id=42270&edit=1
ID: 42270 Comment by: serg4172 at mail dot ru Reported by: steven dot mccoy at miru dot hk Summary: stdClass could not be converted to string Status: Bogus Type: Bug Package: JSON related Operating System: Ubuntu 7.04 PHP Version: 5.2.4RC1-dev Block user comment: N Private report: N New Comment: This is really json problem. Although I have PHP 5.3.3 I have the same issue. $params = json_decode($options); This produce error Object of class stdClass could not be converted to string i solved i like this $params = json_decode(trim(str_replace("\r\n", '\\n', $options))); Previous Comments: ------------------------------------------------------------------------ [2007-08-17 19:57:20] j...@php.net Okay, so you think array_diff() is broken. As our bug system sucks, can't edit original comment, etc. so please, open new short report about the array_diff issue. (this one is a bit confusing with the json stuff and all) And make sure the new report does not have any references to JSON. :D ------------------------------------------------------------------------ [2007-08-17 14:59:33] steven dot mccoy at miru dot hk Well its either json_decode not making stdClass objects friendly for comparison or array_diff() that broke. Lets try the latter then. ------------------------------------------------------------------------ [2007-08-17 13:27:29] j...@php.net So this has nothing to do with JSON? Please reclassify if that is true and fix the summary to contain what the bug is really about.. ------------------------------------------------------------------------ [2007-08-16 12:11:34] steven dot mccoy at miru dot hk The situation I'm using it in is where the browser sends an array of objects to PHP. The PHP scripts uses PEAR::DB_DataObject to generate an array of objects inside a database table, I then use array_diff/array_udiff to calculate what is new, what has changed, and what should be deleted. The array_diff for items that have not changed fails in 5.2 because PHP fails be able to compare some of the stdClass objects. $new_products = array_filter($products, array('Order','is_new_product')); debug('new_order_products: '.count($new_products).' found'); $old_products = array_diff($new_products, $products); debug('old_order_products: '.count($old_products).' calculated'); $updated_products = array_udiff($old_products, $current_products, array('Order', 'product_compare')); debug('updated_order_products: '.count($updated_products).' found'); $deleted_products = array_udiff($current_products, $products, array('Order', 'product_compare_by_id')); debug('deleted_order_products: '.count($deleted_products).' found'); PEAR::DB_DataObject returns table rows as objects, the PHP JSON module defaults to objects, but can include arrays of objects as shown previously. As a workaround I rebuilt PHP 5.1.6 from Ubuntu 6.10 on 7.04. If someone can provide a array_udiff function that can compare objects like before that would be great :-) If the current circumstances are not clear, I will repeat: PHP 5.1.6 generates the expected result output as shown, PHP 5.2 does not. ------------------------------------------------------------------------ [2007-08-16 11:52:54] j...@php.net Here's what I get for the encode: {"first":[{"second":2},"two","three"]} So actually you have another object inside the first, here's var_dump($obj); object(stdClass)#1 (1) { ["first"]=> array(3) { [0]=> object(stdClass)#2 (1) { ["second"]=> int(2) } [1]=> string(3) "two" [2]=> string(5) "three" } } And using json_decode($json, true): array(1) { ["first"]=> array(3) { [0]=> array(1) { ["second"]=> int(2) } [1]=> string(3) "two" [2]=> string(5) "three" } } So what's the bug? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=42270 -- Edit this bug report at http://bugs.php.net/bug.php?id=42270&edit=1