【问题标题】:How to break out of nested foreach loop and enter another foreach loop array?如何跳出嵌套的 foreach 循环并进入另一个 foreach 循环数组?
【发布时间】:2019-12-14 10:18:37
【问题描述】:

我正在努力摆脱这个嵌套的 foreach 循环。

如果您查看我的数据,我正在尝试进入团队信息数组,找出团队 ID 号,一旦我知道该 ID 号,我想跳出团队数组并进入该特定 ID(团队)的 stats 数组,以便我可以获取每个统计信息。

我使用的数据每周都会根据每个团队的排名进行更新,因此 ID 是确定您正在查找的团队的唯一方法。

到目前为止,我有以下代码并且可以获得团队 ID 号,但就像我说的那样,我想用 ID 号打破团队数组并进入该特定 ID 的 stats 数组。此外,这些数据适用于每个 NFL 球队,而且非常长,所以我只发布了我可以为数组发布的内容,以便您了解我的想法,我的 foreach 循环如下所示。

非常感谢任何帮助!!!

数组:

Array(
[overallteamstandings] => Array
    (
        [lastUpdatedOn] => 2019-12-13 4:03:05 AM
        [teamstandingsentry] => Array
            (
                [0] => Array
                    (
                        [team] => Array
                            (
                                [ID] => 56
                                [City] => Baltimore
                                [Name] => Ravens
                                [Abbreviation] => BAL
                            )

                        [rank] => 1
                        [stats] => Array
                            (
                                [GamesPlayed] => Array
                                    (
                                        [@abbreviation] => G
                                        [#text] => 14
                                    )

                                [PassAttempts] => Array
                                    (
                                        [@category] => Passing
                                        [@abbreviation] => Att
                                        [#text] => 384
                                    )

                                [PassCompletions] => Array
                                    (
                                        [@category] => Passing
                                        [@abbreviation] => Comp
                                        [#text] => 255
                                    )

                                [PassPct] => Array
                                    (
                                        [@category] => Passing
                                        [@abbreviation] => Pct
                                        [#text] => 66.4
                                    )

                                [PassGrossYards] => Array
                                    (
                                        [@category] => Passing
                                        [@abbreviation] => Yds
                                        [#text] => 3016
                                    )

Foreach 循环:

foreach ($response as $overallteamstandings => $b) {
    foreach ($b['teamstandingsentry'] as $key => $d) {
        //if ($key == '9'){
        foreach ($d as $cat => $info) {
            if ($cat == 'team') {
                foreach ($info as $c => $v) {
                    if ($c == 'ID') {
                        echo $v;

                        if ($v == '59') {
                            //break 4;
                        }
                    }
                }
            }

            if ($cat == 'stats') {
                foreach ($info as $category => $stats) {
                    if ($category == 'Wins') {
                        foreach ($stats as $val => $value) {
                            if ($val == '#text') {
                                echo $value . "-";
                            }
                        }
                    }
                    if ($category == 'Losses') {
                        foreach ($stats as $val => $value) {
                            if ($val == '#text') {
                                echo $value;
                            }
                        }
                    }
                }
            }
        }
        //}
    }
}

【问题讨论】:

    标签: php multidimensional-array foreach


    【解决方案1】:

    这里有一些功能可能会让您的生活更轻松。第一个返回基于名称或城市的团队的ID 值。第二个返回基于 ID 值的团队的 stats 数组。如果找不到匹配值,所有函数都会返回 false

    // get a team's id based on its name or city
    function get_team_id($response, $team, $type) {
        $teams = array_column($response['overallteamstandings']['teamstandingsentry'], 'team');
        switch ($type) {
            case 'name':
                $key = array_search($team, array_column($teams, 'Name'));
                return ($key !== false) ? $teams[$key]['ID'] : false;
                break;
            case 'city':
                $key = array_search($team, array_column($teams, 'City'));
                return ($key !== false) ? $teams[$key]['ID'] : false;
                break;
            default:
                return false;
        }
    }
    
    // get a team's stats based on its ID
    function get_stats($response, $team) {
        $teams = array_column($response['overallteamstandings']['teamstandingsentry'], 'team');
        $key = array_search($team, array_column($teams, 'ID'));
        return ($key !== false) ? $response['overallteamstandings']['teamstandingsentry'][$key]['stats'] : false;
    }
    

    使用示例(基于您的示例数据):

    echo "ID for city Baltimore is " . get_team_id($response, 'Baltimore', 'city') . "\n";
    echo "ID for name Ravens is " . get_team_id($response, 'Ravens', 'name') . "\n";
    

    输出:

    ID for city Baltimore is 56
    ID for name Ravens is 56
    

    获取统计数据数组:

    print_r(get_stats($response, 56));
    

    输出:

    Array
    (
        [GamesPlayed] => Array
            (
                [@abbreviation] => G
                [#text] => 14
            )
        [PassAttempts] => Array
            (
                [@category] => Passing
                [@abbreviation] => Att
                [#text] => 384
            )
        [PassCompletions] => Array
            (
                [@category] => Passing
                [@abbreviation] => Comp
                [#text] => 255
            )
        [PassPct] => Array
            (
                [@category] => Passing
                [@abbreviation] => Pct
                [#text] => 66.4
            )
        [PassGrossYards] => Array
            (
                [@category] => Passing
                [@abbreviation] => Yds
                [#text] => 3016
            )
    )
    

    Demo on 3v4l.org

    【讨论】:

    • @Dylan 有什么帮助吗?
    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多