[英]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.