我有数据来源,它就像:
$sourceData = json_decode($sourceData);
OR
$sourceData = simplexml_load_string($sourceData);
但可能它可能是另一种类型的源,结果可能是php对象,带有这样的属性路径:
$sourceData->product->time[$x]->location->precipitation['value'];
我想分开这样的路径:
$rootPath = $sourceData->product->time[$x];
$rest = ?
/* probably something like '{$location}->{$precipitation}['value']
but I want the rest in one variable like
$rest = 'location->precipitation['value'];
*/
所以最后我应该加载类似或类似的路径:
$temperature = 'location->data->something->temperature['value'];'
$precipitation = 'location->xxx->yyy->precip['data'];'
并使用如:
for($i)
{
$temp = $root[$i]->temperature;
$precip = $root[$i]->precipitation;
}
答案 0 :(得分:0)
这可以通过动态路径(如“点符号”)完成,但我会推迟它,并确保我真的需要它。它可能很慢,并且在更通用的情况下使用 - 客户端将提供的未知变量路径。
更清洁的方法是将每个根子树($data->product->time
)封装在对象中,使用可以深入内部并返回所需内容的方法。例如:
class ProductProperties
{
private $data;
public function __construct($data)
{
$this->data = $data;
}
public function temperature()
{
return $this->data->location->something->temperature['value'];
}
//...
}
然后创建实例并在循环(或单独的循环)中调用它:
foreach ($sourceData as $root) {
$properties = new ProductProperties($root);
$temp = $properties->temperature();
}