我的$addresses
数组包含每个$client
的多个位置。 这些地址是使用Laravel中的Eloquent关系获取的。
我想获取每个地址,发现与原点的距离(使用Google Maps API),然后将该距离添加回每个对象。
我可以遍历每个键并使用新数据重新添加它,但有没有更简单的方法来读取邮政编码,获取距离并将其添加到每个键中?
$client = client::find($id);
$addresses = $client->address()->get();
啰嗦方法:
foreach ($addresses as $address) {
$newAddress= new \stdClass;
$newAddress->label = $address->label; //seems redundant
$newAddress->street= $address->street; //seems redundant
$newAddress->postcode = $address->postcode; //seems redundant
$newAddress->distance = (function to get distance) //this is the only new data
$newAddresses[] = $newAddress;
}
答案 0 :(得分:4)
您可以在foreach循环声明中使用符号& 来利用references。
foreach ($addresses as &$address) {
$address->distance = (function to get distance); //this is the only new data
}
请注意,在foreach循环中使用引用后,包含引用的变量将悬空在其余的范围内。
在上面的例子中,$ adresse变量的任何后续使用仍将引用$ addresses数组的最后一项。
您可以通过调用
来删除引用unset( $address );
循环后。
或者您可以使用此替代方法:
foreach( $addresses as $key => $adress ) {
$addresses[ $key]->distance = (function to get distance);
}
答案 1 :(得分:-1)
我的工作有更好的解决方案。
您应该在模型中添加一些字段以节省距离。
并为您的地址添加更新事件,以便在模型更新时获得距离
以这种方式,调用google map api会减少。