2014-10-01 2 views
0

Я не могу найти решение этой проблемы, все мои попытки не удались, поэтому мне нужна ваша помощь.В PHP, получите значение массива, когда вы знаете другое значение

Я должен определить различные команды, которые будут противостоять друг другу в турнире по футболу. Я знаю 4 группы команд турнира и какие игры следует играть каждый день, но мне не удается отобразить программу турнира благодаря этой информации.

У меня есть 2 массивы:

-Программа турнира (определяется рейтинге каждой команды в каждой группе есть 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")) 
); 

-The группа детали:

$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 первого в то время как цикл используется, чтобы получить 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

Вы настроили эти структуры данных? Вы усложнили жизнь, добавив ненужный текст в значения массива в '$ турнирах'. Было бы намного проще иметь номера команд, которые будут играть друг с другом. Ответ, который вы опубликовали, также не имеет никакого сходства с предоставленными данными - во входном массиве нет 8-го дня. –

+0

Как я уже сказал, день 4 и 8 день происходят из цикла while, который предоставляет информацию из таблицы моего db. Дело не в этом. Кроме того, я не включил весь мой код, но все данные, которые я получаю в своих массивах, полезны для дальнейшей информации. Спасибо за ваш ответ в любом случае – Fanzouze

+0

Очень полезно, если вы обеспечиваете ожидаемый результат - если вы предоставляете вывод, который не может быть сопоставлен с вводом, он просто запутан. Ни ваш цикл 'while', ни' 'турнир' не имеют никакой информации о 8-м дне, поэтому помещать это как ожидаемый результат вводят в заблуждение. Было бы очень полезно, если бы вы могли предоставить больше кода, поскольку на ваш вопрос можно было бы легко ответить с другой структурой данных, но если вы застряли на структурах данных, которые у вас уже есть, обходной путь нужно будет разработать. –

ответ

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

Выход для групп А и В в течение первых трех дней:

<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

+0

Это не работает, как ожидалось, я сожалею, вот что я получаю с кодом: День день1 Группа A Матчи Матч 1 против матча 2 против группы B Матчи Матч 1 vs Match 2 vs То же самое подходит для каждого дня. – Fanzouze

+0

Я скопировал в структурах данных, которые я использовал, поскольку это звучит как проблема, извлекающая информацию из массивов. Вы должны иметь возможность скопировать и вставить скрипт в файл и запустить его как есть для создания результатов. Если это не сработает, скажите, какую версию PHP вы используете? –

Смежные вопросы