PHP循环以获取我需要的数据

时间:2013-06-12 22:31:53

标签: php arrays

我正在使用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]等。

2 个答案:

答案 0 :(得分: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);
    }
}

除了循环播放所有这些内容之外,我认为没有任何方式可以让您获得特定匹配而不通过其index调用它。

答案 1 :(得分: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']);
}