Этот вопрос закрыт для ответов, так как повторяет вопрос Как в PHP получить объект по пути из переменной?
@riki13
php

Как обратиться к свойству объекта заведомо не зная этого свойства?

Как обратиться к item по шаблону
foreach ($model as $item){
            for ($i = 0; $i <= count($pattern); $i++){
                 //должно выглядеть вот так  $item->catalog->name и тд.
                $data[] = $item->$pattern[$i];
            }
        }


вот что передается
writeFromModel($model, [
            "catalog->name",
            "catalog->article"
        ]);


и в name должен быть массив из name, arcticel

в такой реализации выдает ошибку "Array to string conversion"
возможно ли подобное реализовать на php? и как?
  • Вопрос задан
  • 120 просмотров
Ответы на вопрос 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Семантика у задачи плохая очень (каталог в каталоге, у каталога товар? один? :)
Но в целом вот на коленке как достать значения вложенной глубины

<?php

$catalog = new stdClass();
$catalog->product = new stdClass();
$catalog->product->item = 'Short';
$catalog->product->model = 'Adidas';

$catalogPaths = ['product.item', 'product.model'];


function extractValuesByPath(object $obj, array $paths) {
    return array_reduce($paths, function(array $values, string $pattern) use($obj) {
        $values[] = extractPathValue($obj, $pattern);
        return $values;
    }, []);
}

function extractPathValue($obj, $pattern) {
    $paths = explode('.', $pattern);
    
    foreach($paths as $path) {
        if (!property_exists($obj, $path)) {
            // Можно нулл вернуть или к пример `undefined $path`
            throw new InvalidArgumentException('Нет такого свойства во входящих данных!');
        }
    
        $obj = $obj->$path;
    }
    
    return $obj;
}

$res = extractValuesByPath($catalog, $catalogPaths);
var_dump($res);
// [
//       'Short',
//       'Adidas',
// ]
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы