2014-10-01 60 views
0

我找不到解决这个问题的办法,我所有的尝试都失败了,所以我需要你的帮助。在PHP中,当你知道另一个值时获得一个数组值

我必须定义不同的球队在足球锦标赛中相互对抗。我知道锦标赛的4组比赛以及每天应该参加哪些比赛,但是由于这些信息,我无法展示比赛项目。

我有2个数组:

-the比赛节目(由每队各组中的排名定义,每天有2场在各4组):

$tournament = array(
    "day1" => array(1=> array("team1", "team2"), 2=> array("team3", "team4")), 
    "day2" => array(1=> array("team3", "team1"), 2=> array("team4", "team2")), 
    "day3" => array(1=> array("team1", "team4"), 2=> array("team2", "team3")), 
    "day4" => array(1=> array("team2", "team1"), 2=> array("team4", "team3")), 
    "day5" => array(1=> array("team1", "team3"), 2=> array("team2", "team4")), 
    "day6" => array(1=> array("team4", "team1"), 2=> array("team3", "team2")) 
); 

- 团体的详细信息:

$users_group = array ( 
    [0] => Array ([team] => Superteam1 [rank] => 1 [group] => A) 
    [1] => Array ([team] => Superteam2 [rank] => 2 [group] => A) 
    [2] => Array ([team] => Superteam3 [rank] => 3 [group] => A) 
    [3] => Array ([team] => Superteam4 [rank] => 4 [group] => A) 
    [4] => Array ([team] => Superteam5 [rank] => 1 [group] => B) 
    [5] => Array ([team] => Superteam6 [rank] => 2 [group] => B) 
    [6] => Array ([team] => Superteam7 [rank] => 3 [group] => B) 
    [7] => Array ([team] => Superteam8 [rank] => 4 [group] => B) 
    [8] => Array ([team] => Superteam9 [rank] => 1 [group] => C) 
    [9] => Array ([team] => Superteam10 [rank] => 2 [group] => C) 
    [10] => Array ([team] => Superteam11 [rank] => 3 [group] => C) 
    [11] => Array ([team] => Superteam12 [rank] => 4 [group] => C) 
    [12] => Array ([team] => Superteam13 [rank] => 1 [group] => D) 
    [13] => Array ([team] => Superteam14 [rank] => 2 [group] => D) 
    [14] => Array ([team] => Superteam15 [rank] => 3 [group] => D) 
    [15] => Array ([team] => Superteam16 [rank] => 4 [group] => D) 
) 

我希望在比赛的每一天都显示两场比赛将进行的比赛。不过我试过不行,我只能拿到第一场比赛的第一个队(NB第一while循环用于从我的数据库获取比赛的6天):

$i=1; 
while($i<7){ 
    echo '<div>Day '.$i.'</div>'; 

    $max = count($users_group); 
    for($l = 0; $l < $max; $l++){ 
     if($users_group[$l]['rang']==substr($tournament["day".$i][1][0],-1)){ 
      echo $users_group[$l]['team']; 
     } 
     if($users_group[$l]['rang']==substr($tournament["day".$i][1][1],-1)){ 
      echo ' VS '.$users_group[$l]['team'] . '<br />'; 
     } 

     if($users_group[$l]['rang']==substr($tournament["day".$i][2][0],-1)){ 
      echo $users_group[$l]['team']; 
     } 
     if($users_group[$l]['rang']==substr($tournament["day".$i][2][1],-1)){ 
      echo ' VS '.$users_group[$l]['team'] . '<br />'; 
     } 


    } 
    $i++; 
} 

我想显示是这样的:

Day 1 

Superteam1 VS Superteam2 
Superteam3 VS Superteam4 

Superteam5 VS Superteam6 
Superteam7 VS Superteam8 

Superteam9 VS Superteam10 
Superteam11 VS Superteam12 

Superteam13 VS Superteam14 
Superteam15 VS Superteam16 


Day 2 

Superteam3 VS Superteam1 
Superteam4 VS SUperteam2 

etc 
. 
. 
. 

我试图让一个功能,避免只得到每一次$users_group[$l]['team']的第一个值,但我不能使它工作。

非常感谢您的帮助!

+0

你建立这些数据结构? '$ tournament'中的数组值增加了不必要的文本,从而使生活变得困难。只有拥有可以互相比赛的球队数量会更容易。您发布的答案与提供的数据不相似 - 输入数组中没有第8天。 – 2014-10-01 10:30:55

+0

正如我所说的,第4天和第8天来自一个while循环,它提供了我的db表的信息。这不是重点。另外,我没有包含所有的代码,但是我在数组中获得的所有数据都可用于显示更多信息。无论如何感谢您的回答 – Fanzouze 2014-10-01 11:02:16

+0

如果您提供预期的输出 - 如果您提供的输出不能与输入相关,那么这非常有用,这只是令人困惑。您的'while'循环或'$ tournament'都没有关于第8天的任何信息,因此将其作为预期的输出结果是误导性的。如果您可以提供更多代码,因为您的问题可以通过不同的数据结构轻松解决,但是如果您坚持使用已有的数据结构,将会非常有帮助,因此必须设计一种解决方法。 – 2014-10-01 11:07:47

回答

0

以下代码将完成这项工作。我创建了新的数据结构,以便更容易地访问有关组,团队,日子等的数据。我已经在代码中加入了评论和解释,但请问你是否不明白它在做什么。

<?php 

$tournament = array(
    "day1" => array(1=> array("team1", "team2"), 2=> array("team3", "team4")), 
    "day2" => array(1=> array("team3", "team1"), 2=> array("team4", "team2")), 
    "day3" => array(1=> array("team1", "team4"), 2=> array("team2", "team3")), 
    "day4" => array(1=> array("team2", "team1"), 2=> array("team4", "team3")), 
    "day5" => array(1=> array("team1", "team3"), 2=> array("team2", "team4")), 
    "day6" => array(1=> array("team4", "team1"), 2=> array("team3", "team2")) 
); 


$users_group = array (
    array('team' => 'Superteam1', 'rank' => 1, 'group' => 'A'), 
    array('team' => 'Superteam2', 'rank' => 2, 'group' => 'A'), 
    array('team' => 'Superteam3', 'rank' => 3, 'group' => 'A'), 
    array('team' => 'Superteam4', 'rank' => 4, 'group' => 'A'), 
    array('team' => 'Superteam5', 'rank' => 1, 'group' => 'B'), 
    array('team' => 'Superteam6', 'rank' => 2, 'group' => 'B'), 
    array('team' => 'Superteam7', 'rank' => 3, 'group' => 'B'), 
    array('team' => 'Superteam8', 'rank' => 4, 'group' => 'B'), 
    array('team' => 'Superteam9', 'rank' => 1, 'group' => 'C'), 
    array('team' => 'Superteam10', 'rank' => 2, 'group' => 'C'), 
    array('team' => 'Superteam11', 'rank' => 3, 'group' => 'C'), 
    array('team' => 'Superteam12', 'rank' => 4, 'group' => 'C'), 
    array('team' => 'Superteam13', 'rank' => 1, 'group' => 'D'), 
    array('team' => 'Superteam14', 'rank' => 2, 'group' => 'D'), 
    array('team' => 'Superteam15', 'rank' => 3, 'group' => 'D'), 
    array('team' => 'Superteam16', 'rank' => 4, 'group' => 'D'), 
); 

# this function is used by array_map to remove "team" from the $tournament data struct. 
$func = function($value) { 
    $value = str_replace("team", "", $value); 
    return $value; 
}; 

# redo the tournament array to remove all the "day" and "team" strings 
foreach ($tournament as $day => $val) { 
    $new_day = str_replace("day", "", $day); 
    foreach ($val as $m => $t) { 
     # this removes "team" from the values 
     $days[$new_day][$m] = array_map($func, $t); 
    } 
} 

# turn the users_group array into a multidimension array in the form 
# $ranked_ug = [ group ][ rank ] = team 
$ranked_ug = array(); 
foreach($users_group as $u => $data){ 
    $ranked_ug[ $data['group'] ][ $data['rank'] ] = $data['team']; 
} 

# this is used to get data about the team from $ranked_ug 
function getKey($t_data) { 
    return function ($value) use ($t_data) { 
     return $t_data[$value]; 
    }; 
} 

# for each day... 
foreach ($days as $d => $d_data) { 
    echo "<h2>Day $d</h2>\n"; 
    # iterate through each group 
    foreach ($ranked_ug as $g => $g_data) { 
     echo "<h3>Group $g Matches</h3>\n"; 
     # look at each match 
     foreach ($d_data as $match_no => $teams) { 
      echo "<p>Match $match_no<br>\n"; 
      # $teams contains the numbers of the teams playing 
      # pull the team name from $ranked_ug using $ranked_ug[$g][ rank ] 
      # this line uses implode to join the team names with "vs" 
      # and array_map to automatically get the team name from $ranked_ug 
      echo implode(" vs ", 
       array_map(getKey($ranked_ug[$g]), $teams)) . "</p>\n"; 
     } 
     echo "\n"; 
    } 
    echo "\n"; 
} 

团体A输出和B的前三天:

<h2>Day 1</h2> 
<h3>Group A Matches</h3> 
<p>Match 1<br> 
Superteam1 vs Superteam2</p> 
<p>Match 2<br> 
Superteam3 vs Superteam4</p> 

<h3>Group B Matches</h3> 
<p>Match 1<br> 
Superteam5 vs Superteam6</p> 
<p>Match 2<br> 
Superteam7 vs Superteam8</p> 


<h2>Day 2</h2> 
<h3>Group A Matches</h3> 
<p>Match 1<br> 
Superteam3 vs Superteam1</p> 
<p>Match 2<br> 
Superteam4 vs Superteam2</p> 

<h3>Group B Matches</h3> 
<p>Match 1<br> 
Superteam7 vs Superteam5</p> 
<p>Match 2<br> 
Superteam8 vs Superteam6</p> 


<h2>Day 3</h2> 
<h3>Group A Matches</h3> 
<p>Match 1<br> 
Superteam1 vs Superteam4</p> 
<p>Match 2<br> 
Superteam2 vs Superteam3</p> 

<h3>Group B Matches</h3> 
<p>Match 1<br> 
Superteam5 vs Superteam8</p> 
<p>Match 2<br> 
Superteam6 vs Superteam7</p> 
+0

谢谢,我惊恐的外星人我会尝试一下! – Fanzouze 2014-10-01 14:06:28

+0

预期对不起这儿,那没有工作就是我与你的代码: 日DAY1 A组比赛 1场 VS 2场 VS B组比赛 1场 vs 第2场比赛 vs 每天都有相同的比赛。 – Fanzouze 2014-10-01 14:16:16

+0

我复制了我使用的数据结构,因为它听起来像是从数组中提取信息的问题。您应该能够将上面的脚本复制并粘贴到文件中并按原样运行以创建结果。如果它不起作用,你会告诉我你使用的PHP版本是什么? – 2014-10-01 15:10:23

相关问题