簡體   English   中英

在PHP中嵌套Foreach循環

[英]Nesting Foreach Loops in PHP

我有一個具有這種結構的類:

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

?>

輸出:

Mike
Luke
Smith

所以這些是三個獨立的類,而不是一個類。 您沒有展示如何將這些類關聯在一起以及如何實際創建數據結構。 我不認為你會怎么能夠神奇地能夠列出所有玩家的電話,例如$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

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

   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM