我正在使用laravel来循环检索来自我控制器中的api的数据,它一切正常但是由于某种原因在循环中如果我var_dump数据我得到所有应该在那里但在我的循环之外当我通过数据在我看来它不起作用。
我正在运行api请求然后当我得到我的回复时,我正在为每个原始响应运行辅助api请求。这是我遇到问题的代码的一部分。
foreach(array_slice($nearbysearchresults->results, 0, 5) as $result) // slicing array to limit requests
{
$getplacedetails ="https://maps.googleapis.com/maps/api/place/details/json?placeid=". $result->place_id ."&key=XXXX";
$placesearchresults = json_decode(file_get_contents($getplacedetails));
var_dump($placesearchresults); // shows all 5 results
}
var_dump($placesearchresults); // shows all 1 result (outside loop).
答案 0 :(得分:2)
你必须改变:
$placesearchresults = json_decode(file_get_contents($getplacedetails));
为:
$placesearchresults[] = json_decode(file_get_contents($getplacedetails));
因为在您当前的代码中,每次都会覆盖$placesearchresults
的值,所以这也是为什么在循环结束时(外部)只有1个结果。因此,为了获得循环之外的每个值,我们使用$placesearchresults
创建一个数组,并将每个值[]
添加到数组
此外,您还可以阅读:D请参阅“使用方括号语法创建/修改”下的内容:http://php.net/manual/en/language.types.array.php
并引用了一点:
可以通过显式设置现有数组来修改现有数组。
这是通过为数组赋值,在括号中指定键来完成的。密钥也可以省略,从而产生一对空括号([])。
$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type
如果$ arr尚不存在,它将被创建,因此这也是创建数组的另一种方法。但是不鼓励这种做法,因为如果$ arr已经包含一些值(例如来自请求变量的字符串),则该值将保留在该位置,并且[]实际上可以代表字符串访问运算符。通过直接赋值初始化变量总是更好。