Dynamically access an object property array elemen

2019-06-05 12:36发布

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.

标签: php oop
3条回答
等我变得足够好
2楼-- · 2019-06-05 13:14
$individual_match->field_match_game1team1[0]['value'] = 'hello1';

$i = 1;
$j = 1;

$default_value = $individual_match->{'field_match_game'.$i.'team'.$j}[0]['value'];
查看更多
贪生不怕死
3楼-- · 2019-06-05 13:26

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.

查看更多
我命由我不由天
4楼-- · 2019-06-05 13:30

'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;
查看更多
登录 后发表回答