how to modify or read stdClass object inside array?

I have this as a part of  a code generated by this print command:
$output = print_r($usable_rates, true);

Open in new window


Array ( 
[3] => stdClass Object ( 
[shipping_id] => 3 [shipping_type] => manual [shipping_zone_namekey] => [shipping_tax_id] => 0 
[shipping_price] => 40 

Open in new window

I need to modify shipping_price = 10
how do I go about it?
LVL 10
aboo_sAsked:
Who is Participating?
 
Ray PaseurConnect With a Mentor Commented:
Please see the note here:
http://php.net/manual/en/language.oop5.properties.php#108320

$array[1]->shipping_price = 10;  WORKS
$array[1]->$shipping_price = 10;  IS AN ERROR

Here you go: http://iconoun.com/demo//temp_aboo_s.php

<?php // demo/temp_aboo_s.php
error_reporting(E_ALL);

/**
 * SEE http://www.experts-exchange.com/Programming/Languages/Scripting/PHP/Q_28575851.html#a40485533
 *
 * array(1)
 * { [3]=> object(stdClass)#493
 *     (15) {
 *        ["shipping_id"]=> string(1) "3"
 *        ["shipping_type"]=> string(6) "manual"
 *        ["shipping_zone_namekey"]=> string(0) ""
 *        ["shipping_tax_id"]=> string(1) "0"
 *        ["shipping_price"]=> float(40)
 *      // ETC ETC
 */

// MAKE THINGS EASIER TO READ
echo '<pre>';

// CREATE A TEST OBJECT AND INJECT PROPERTIES
$obj = new StdClass;
$obj->shipping_id           = "3";
$obj->shipping_type         = "manual";
$obj->shipping_zone_namekey = "";
$obj->shipping_tax_id       = "0";
$obj->shipping_price        = (float) 40;

// ASSIGN THE OBJECT TO A POSITION OF AN ARRAY
$arr[3] = $obj;

// DOES IT LOOK RIGHT? (YES, CLOSE ENOUGH)
var_dump($arr);

// SHOW HOW TO GET A PROPERTY FROM THE OBJECT
$dat = $arr[3]->shipping_type;
var_dump($dat);

// SHOW HOW TO SET A PROPERTY IN THE OBJECT
$arr[3]->shipping_price = 40.01;

// SHOW THE ARRAY CONTAINING THE CHANGED OBJECT
var_dump($arr);

Open in new window

HTH, ~Ray
0
 
Ray PaseurCommented:
It appears that there are three elements in the array, but you only showed us one of them.  Let's assume for the sake of getting a code sample that you want to modify the object in array element number 1, which is an object.

$array[1]->shipping_price = 10;

Open in new window

0
 
aboo_sAuthor Commented:
Well unfortunately I have tried this and got:
Object of class stdClass could not be converted to string in ..

And I showed you the first slice of the code generated by the print_r command on my array
$usable_rates
the first one starts with [3]
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
aboo_sAuthor Commented:
Tried this:
$usable_rates->$shipping_price=15;

Open in new window

and got:
Cannot use object of type stdClass as array in ..
0
 
aboo_sAuthor Commented:
I used this:
$usable_rates->$shipping_price=15;

Open in new window

got no errors ,but value printed of shipping_price was blank!
0
 
aboo_sAuthor Commented:
This:
$usable_rates->'3'->$shipping_price=15;
is a no go as well!
0
 
Ray PaseurCommented:
OK, let's look at the data. Please use var_dump($usable_rates) to print out the array of objects and copy/paste the output into the code snippet here.
0
 
aboo_sAuthor Commented:
What I gave you in the first place was a dump printed out by print_r()
any way I will also give you the var_dump
which should be just about the same..
0
 
Ray PaseurCommented:
Yes, but the reason to prefer var_dump() is that it also gives you data types as well as data contents!
0
 
aboo_sAuthor Commented:
array(1) { [3]=> object(stdClass)#493 (15) { ["shipping_id"]=> string(1) "3" 
["shipping_type"]=> string(6) "manual" ["shipping_zone_namekey"]=> string(0) "" 
["shipping_tax_id"]=> string(1) "0" ["shipping_price"]=> float(40)  ...

Open in new window

0
 
aboo_sAuthor Commented:
I tried it ,it doesn't give any error ,but it didn't give the wanted value.
It actually gave a blank value!

I did this:
$usable_rates->shipping_price=15.0;
		die( 
		"***".$usable_rates->shipping_price."***");

Open in new window

0
 
aboo_sAuthor Commented:
output was this:
******
0
 
aboo_sAuthor Commented:
Alright .. Got it
This worked:
$usable_rates[0]->shipping_price=15;

Thanks!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.