Как обратиться к свойству объекта заведомо не зная этого свойства? Как обратиться к item по шаблонуforeach ($model as $item){ for ($i = 0; $i catalog->name и тд. $data[] = $item->$pattern[$i]; } } вот что передается writeFromModel($model, [ "catalog->name", "catalog->article" ]); и в name должен быть массив из name, arcticel в такой реализации выдает ошибку "Array to string conversion" возможно ли подобное реализовать на php? и как?
Для обращения к свойствам объекта по динамическим именам можно использовать функцию eval(), но она может быть опасной из-за потенциальных уязвимостей. Вместо этого можно использовать функцию stdClass для преобразования объекта в массив и обращаться к свойствам по ключу.
Вот как можно изменить ваш код для обращения к свойствам объекта по шаблону:
foreach ($model as $item){ $itemData = []; foreach ($pattern as $property){ $properties = explode("->", $property); $tempItem = $item; foreach ($properties as $prop){ if (is_object($tempItem)) { $tempItem = (array) $tempItem; } if (is_array($tempItem)) { $tempItem = (object) $tempItem; } $tempItem = $tempItem->$prop; } $itemData[] = $tempItem; } $data[] = $itemData; }
В этом примере мы разбиваем путь к свойству объекта на части, преобразуем объект в массив, обращаемся к свойству и сохраняем его значение в массив $itemData.
Надеюсь, это поможет вам решить проблему с обращением к свойствам объекта по шаблону.
Для обращения к свойствам объекта по динамическим именам можно использовать функцию eval(), но она может быть опасной из-за потенциальных уязвимостей. Вместо этого можно использовать функцию stdClass для преобразования объекта в массив и обращаться к свойствам по ключу.
Вот как можно изменить ваш код для обращения к свойствам объекта по шаблону:
foreach ($model as $item){$itemData = [];
foreach ($pattern as $property){
$properties = explode("->", $property);
$tempItem = $item;
foreach ($properties as $prop){
if (is_object($tempItem)) {
$tempItem = (array) $tempItem;
}
if (is_array($tempItem)) {
$tempItem = (object) $tempItem;
}
$tempItem = $tempItem->$prop;
}
$itemData[] = $tempItem;
}
$data[] = $itemData;
}
В этом примере мы разбиваем путь к свойству объекта на части, преобразуем объект в массив, обращаемся к свойству и сохраняем его значение в массив $itemData.
Надеюсь, это поможет вам решить проблему с обращением к свойствам объекта по шаблону.