PHP中Foreach循环的嵌套

PHP中Foreach循环的嵌套,php,arrays,oop,multidimensional-array,foreach,Php,Arrays,Oop,Multidimensional Array,Foreach,我有一个类具有这种类型的结构: Class League Array Teams Class Teams Array Players Class Players String name 然而,如果我想得到联盟中所有球员的名单,这似乎不起作用: foreach ($league->teams->players as $player) { echo $player->name; } 我错过了什么?是否必须使用两个foreach循环?请参见此示

我有一个类具有这种类型的结构:

Class League
    Array Teams

Class Teams
    Array Players

Class Players
    String name
然而,如果我想得到联盟中所有球员的名单,这似乎不起作用:

foreach ($league->teams->players as $player) {
    echo $player->name;
}
我错过了什么?是否必须使用两个foreach循环?

请参见此示例:

<?php

//Create your players
$player1 = new stdClass;
$player2 = new stdClass;
$player3 = new stdClass;

$player1->name = 'Mike';
$player2->name = 'Luke';
$player3->name = 'Smith';

//Create your teams
$team1 = new stdClass;
$team2 = new stdClass;

//Adding the players to their teams
$team1->Players = array($player1, $player2);
$team2->Players = array($player3);

//Create the league
$league = new stdClass;

//Adding the teams to the league
$league->Teams = array($team1, $team2);

//For each element in the Teams array get the team in $team
foreach ($league->Teams as $teams) {
//For each element in the Players array get the player in $player
  foreach($teams->Players as $player) {
//Print the name
    echo $player->name . "<br>\n";
  }
}

?>

您可能需要两个嵌套的
foreach

foreach ($league->teams as $team;){
  foreach ($team->players as $player){
    $list[] = $player->name;

   }
}

所以这是三个独立的类,而不是一个单独的类。关于如何将这些类关联在一起以及如何实际创建数据结构,您没有展示任何内容。我不明白你怎么会认为你能够神奇地通过调用列出所有玩家,比如
$league->teams->players
,而不需要在每个类中使用特定的方法来处理嵌套对象中存储的数据的聚合

如果不在类中定义这些关系,则需要执行如下嵌套循环:

foreach ($league->Teams as $team) {
    foreach($team->Players as $player) {
        echo $player->name;
    }
}
例如,如果希望方法列出联盟级别的所有球员,则需要定义一个方法来完成此操作。也许是这样的:

小组课:

public function function get_all_players() {
    $return = array();
    if(count($this->Players) > 0) {
        $return = $this->Players;
    }
    return $return;
}
在联赛中:

public function get_all_players() {
    $return = array();
    if(count($this->Teams) > 0) {
        foreach($this->Teams as $team) {
            $return = array_merge($return, $team->get_all_players());
        }
    }
    return $return;
}
用途如下:

foreach($league->get_all_players() as $player) {
    echo $player->name;
}

foreach($league->teams as$t=>p{echo$p->name;}我认为如果你把它作为一个键=>值对循环,你会去掉一层。除非你给我们$league的初始化值,否则很难给出一个明确的答案。你最需要的是Adrian的答案。你有什么进展吗?如果一个答案有助于你不要忘记检查是否已接受,如果你不知道如何阅读这个stackoverflow.com/tourThi这是你最好的选择。
foreach($league->get_all_players() as $player) {
    echo $player->name;
}