tags:

views:

32

answers:

3

I have an object, that I would like to interact with dynamically. I would like to rename the game1_team1 in:

$default_value = $individual_match->field_match_game1_team1[0]['value'];

to be game1_team2, game2_team1, game2_team2, game3_team1, etc. Based on the loop they are in.

I have tried:

$dynamic = 'field_match_game'.$i.'_team'.$j;
$default_value = $individual_match->$dynamic[0]['value'];

but it returns

Fatal error: Cannot use string offset as an array

Update: Based on Saul's answer, I modified the code to:

$default_value = $individual_match->{'field_match_game'.$i.'_team'.$j}[0]['value'];

which got rid of the Fatal error, but doesn't return a value.

A: 

'Renaming' is not possible unless you create a new property, and delete the old one. Access dynamic names like this:

$dynamic = "field_match_$i_team$j";
$default_value = $individual_match->$dynamic[0]['value'];

Note the $ between -> and dynamic.

Delete and create example:

$oldProperty = "field_match_1_team1";
$newProperty = "field_match_$i_team$j";
$hold = $individual_match->$oldProperty;
unset($individual_match->$oldProperty);
$individual_match->$newProperty = $hold;
Lekensteyn
Two challenges: 1. $dynamic = "field_match_$i_team$j"; doesn't seem to work because the variable is assumed to be $i_team... instead of $i. 2. The use of the $dynamic[0]['value'] returns "Fatal error: Cannot use string offset as an array"
Ted
A: 
$individual_match->field_match_game1team1[0]['value'] = 'hello1';

$i = 1;
$j = 1;

$default_value = $individual_match->{'field_match_game'.$i.'team'.$j}[0]['value'];
Saul
That doesn't cause the string offset error, but it doesn't return a value either.
Ted
That's because you dont have a value assigned in the first place. If you copied the full example then $default_value would contain 'hello1'. Do print_r on $individual_match and see for yourself.
Saul
A: 

Look at this : http://php.net/manual/en/function.get-class-vars.php You can list all object's properties in array and select only needed.

Tema