首页 > 解决方案 > 我可以遍历一个元素数组,在每次迭代中发出一个 GET 请求,并以某种方式将 GET 结果映射到相应的元素吗?

问题描述

$summonerMatches 是一个对象,它包含一个名为 matches 的属性,其中包含一个对象数组。每个对象都包含有关比赛的信息,例如 gameId。

在此处输入图像描述

为了获取有关比赛的具体信息,我必须使用 gameId 发出 GET 请求。我目前正在遍历这些匹配项并发出 GET 请求以获取有关每个匹配项的特定信息,但是,我想知道如何将返回的信息链接到 $summonerMatches 对象内的相应匹配对象。在某种程度上,我想为每个匹配项创建一个新属性,然后将其分配给循环中 GET 请求的结果。

$getSummonerMatches = file_get_contents($region . "/lol/match/v4/matchlists/by-account/gvgxEQIJUq3bvbR_oasXkFHY7oJ5G2WViBGVCL1eKGJXsg?startIndex=0&endIndex=10&api_key=" . $apiKey);
$summonerMatches = json_decode($getSummonerMatches);

foreach ($summonerMatches->matches as $match) {
    $getMatchInfo = file_get_contents($region . "/lol/match/v4/matches/" . $match->gameId . "?api_key=" . $apiKey);
    $matchInfo = json_decode($getMatchInfo);
}

标签: phplaravel

解决方案


我看不出有理由不matchInfo使用从 API 检索到的数据为每个对象设置一个调用的新属性。

<?php

$getSummonerMatches = file_get_contents($region . "/lol/match/v4/matchlists/by-account/gvgxEQIJUq3bvbR_oasXkFHY7oJ5G2WViBGVCL1eKGJXsg?startIndex=0&endIndex=10&api_key=" . $apiKey);
$summonerMatches = json_decode($getSummonerMatches);

foreach ($summonerMatches->matches as &$match) {
    $getMatchInfo = file_get_contents($region . "/lol/match/v4/matches/" . $match->gameId . "?api_key=" . $apiKey);
    $matchInfo = json_decode($getMatchInfo);
    $match->matchInfo = $matchInfo;
}

请注意,a&已添加到 foreach。这样,$match就成为对原始对象的引用,而不是副本,从而使我们的更改保持在foreach.

对于更优雅的方法,您可以让这些对象中的每一个都属于一个实际的类,并使用一种方法来设置值,例如addMatchInfo($matchInfo),而不是直接创建属性。


推荐阅读