Семантика у задачи плохая очень (каталог в каталоге, у каталога товар? один? :)
Но в целом вот на коленке как достать значения вложенной глубины
<?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',
// ]