PHP循环获取我需要的数据


PHP loop to get the data I need

我正在使用一个API,我正在使用几个foreach循环来达到我现在所处的阶段。请参阅下面的代码和我的评论,以及我在下面得到的结果。

// get recent_games api data
$recent_games_data = $player->recent_games();
//start arrays for below
$matches = array();
$gameType = array();
$myData = array();
// using foreach loops to dig in to api data
foreach($recent_games_data['gameStatistics']['array'] as $key_match_data => $value_match_data) {
    $matches[] = $value_match_data['statistics'];
}
foreach($matches as $key_match) {
    $gameType[] = $key_match['array'];
}
foreach ($gameType as $keyz) {
    $myData[] = $keyz;
}

$mydata数组输出如下数据:

Array
(
[0] => Array
    (
        [0] => Array
            (
                [statType] => TRUE_DAMAGE_DEALT_TO_CHARACTER
                [dataVersion] => 0
                [value] => 3351
                [futureData] => 
            )
        [1] => Array
            (
                [statType] => ASSISTS
                [dataVersion] => 0
                [value] => 14
                [futureData] => 
            )
        [2] => Array
            (
                [statType] => NUM_DEATHS
                [dataVersion] => 0
                [value] => 3
                [futureData] => 
            )
    )
[1] => Array
    (
        [0] => Array
            (
                [statType] => TRUE_DAMAGE_DEALT_TO_CHARACTER
                [dataVersion] => 0
                [value] => 331
                [futureData] => 
            )
        [1] => Array
            (
                [statType] => ASSISTS
                [dataVersion] => 0
                [value] => 4
                [futureData] => 
            )
        [2] => Array
            (
                [statType] => NUM_DEATHS
                [dataVersion] => 0
                [value] => 7
                [futureData] => 
            )
    )

当然还有更多的数据,但这基本上是我现在拥有的。第一个数组[0]是每个匹配,第二个数组是该匹配的统计信息。我想要的是如何在不硬编码匹配数组编号的情况下获得每次匹配的统计数据,例如:

  $myData[0][0]['statType']

如果你需要更多的信息,请告诉我,谢谢。

编辑:很抱歉地提到,随着新的统计数据被添加到api,索引号改变。例如TRUE_DAMAGE_DEALT_TO_CHARACTER一开始是[0],但之后可能会变成[1]或[2]等

考虑在解析完数据后为统计项实现一个类(独立于单个匹配信息键):

class Stat_Item {
    function __construct($id, $info) {
        $this->id = $id;
        if(!empty($info['damage'])
            $this->damage_dealt = $info['damage'];
        if(!empty($info['assists']))
            $this->assists = $info['assists'];
        if(!empty($info['deaths']))
            $this->deaths = $info['deaths'];
    }
}
$parsed_items = array();
foreach($mydata as $match_id => $match) {
    $info = array();
    foreach($match as $data_point) {
        switch($data_point['statType']) {
            case TRUE_DAMAGE_DEALT_TO_CHARACTER:
                $info['damage'] = $data_point['value'];
                break;
            case ASSISTS:
                $info['assists'] = $data_point['value'];
                break;
            case NUM_DEATHS:
                $info['deaths'] = $data_point['value'];
                break;
        }
        $parsed_items[] = new Stat_Item($match, $info);
    }
}

除了循环遍历它们之外,我不认为您有任何方法可以在不通过其index调用它的情况下获得特定匹配

您不需要几个foreach循环-您可以在一个数组中添加所有三个数组。此外,看起来$gameType和$myData最终包含相同的数据。

foreach($recent_games_data['gameStatistics']['array'] as $key_match_data => $value_match_data) {
    $matches[] = $value_match_data['statistics'];
    $gameType[] = $value_match_data['statistics']['array'];
    $myData[] = $value_match_data['statistics']['array'];
}

我真的不明白为什么你不把它放在同一个数组中,这样你就可以很容易地访问它:

foreach($recent_games_data['gameStatistics']['array'] as $key_match_data => $value_match_data) {
    $matches[] = array('statistics' => $value_match_data['statistics'], 'data' => $value_match_data['statistics']['array']);
}