动态访问PHP中的对象属性数组元素

动态访问PHP中的对象属性数组元素

问题描述:

我有一个对象,我想动态地进行交互。我想重新命名game1_team1:动态访问PHP中的对象属性数组元素

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

是game1_team2,game2_team1,game2_team2,game3_team1等。基于环路他们在

我曾尝试:

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

但它返回

Fatal error: Cannot use string offset as an array

更新:基于扫罗的回答,我修改了代码:

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

它摆脱了致命错误,但没有返回值。

+1

为什么人们不断要求变量变量?数组出了什么问题? – delnan 2010-10-24 15:18:59

+0

它是创建对象的第三方模块。 – Ted 2010-10-24 15:23:47

$individual_match->field_match_game1team1[0]['value'] = 'hello1'; 

$i = 1; 
$j = 1; 

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

这不会导致字符串偏移错误,但它也不会返回任何值。 – Ted 2010-10-24 15:31:22

+0

这是因为您没有首先分配值。如果您复制了完整的示例,那么$ default_value将包含'hello1'。对$ individual_match执行print_r并亲自查看。 – Saul 2010-10-24 15:35:07

'重命名'是不可能的,除非你创建一个新的属性,并删除旧的。 访问动态的名字是这样的:

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

->dynamic之间的$。在此

$oldProperty = "field_match_1_team1"; 
$newProperty = "field_match_$i_team$j"; 
$hold = $individual_match->$oldProperty; 
unset($individual_match->$oldProperty); 
$individual_match->$newProperty = $hold; 
+0

两个挑战:1. $ dynamic =“field_match_ $ i_team $ j”;似乎不工作,因为变量被假定为$ i_team ...而不是$ i。 2.使用$ dynamic [0] ['value']返回“致命错误:不能使用字符串偏移作为数组” – Ted 2010-10-24 15:17:45

看:

删除和创建例如http://php.net/manual/en/function.get-class-vars.php 可以在阵列列出所有对象的属性和选择,才需要。