0

我正在使用 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 时,索引号会发生变化。IE TRUE_DAMAGE_DEALT_TO_CHARACTER 开始时为 [0],但随后可能更改为 [1] 或 [2] 等。

4

2 回答 2

1

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

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);
    }
}

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

于 2013-06-12T22:37:53.113 回答
0

您不需要多个 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']);
}
于 2013-06-12T22:40:21.323 回答