У меня есть объект, который я хотел бы динамически взаимодействовать. Я хотел бы переименовать game1_team1 в:
$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'];
но он возвращает
Неустранимая ошибка: нельзя использовать смещение строки в виде массива
Обновление. Основываясь на ответе Саула, я изменил код на:
$default_value = $individual_match->{'field_match_game'.$i.'_team'.$j}[0]['value'];
который избавился от Fatal error, но не возвращает значение.
$individual_match->field_match_game1team1[0]['value'] = 'hello1'; $i = 1; $j = 1; $default_value = $individual_match->{'field_match_game'.$i.'team'.$j}[0]['value'];
«Переименование» невозможно, если вы не создаете новое свойство и не удаляете старый. Доступ к динамическим именам следующим образом:
$dynamic = "field_match_$i_team$j"; $default_value = $individual_match->$dynamic[0]['value'];
Обратите внимание на $
from ->
and dynamic
.
Удалите и создайте пример:
$oldProperty = "field_match_1_team1"; $newProperty = "field_match_$i_team$j"; $hold = $individual_match->$oldProperty; unset($individual_match->$oldProperty); $individual_match->$newProperty = $hold;
с$oldProperty = "field_match_1_team1"; $newProperty = "field_match_$i_team$j"; $hold = $individual_match->$oldProperty; unset($individual_match->$oldProperty); $individual_match->$newProperty = $hold;
Посмотрите на это: http://php.net/manual/en/function.get-class-vars.php Вы можете перечислить все свойства объекта в массиве и выбрать только необходимый.