Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод футбольной таблицы
 
 автор: P@Sol   (01.06.2007 в 15:37)   письмо автору
 
 

Array (
[24] => Array ( [1] => 3 [2] => 0 [3] => 3 [4] => 3 [5] => 3 [6] => 3 )
[2] => Array ( [1] => 0 [2] => 0 [3] => 1 [4] => 3 [5] => 3 [6] => 3 )
[25] => Array ( [1] => 0 [2] => 0 [3] => 3 [4] => 0 [5] => 1 [6] => 0 )
[16] => Array ( [1] => 3 [2] => 3 [3] => 1 [4] => 0 [5] => 0 [6] => 0 )
)

есть примерно такой массив - 24, 2, 25, 16 - ид команды, в подмассиве количество очков заработанное в 1, 2, 3, 4, 5 и 6 и т.д. турах. как можн вывести таблицу вроде этой?

        |    1 тур     |    2 тур     |    3 тур     | 
Команда ---------------------------------------------- 
        | Очки | Место | Очки | Место | Очки | Место | 
------------------------------------------------------ 
24      |   3  |   1   |   3  |    2  |   6  |   2   |
2       |   0  |   3   |   0  |    3  |   1  |   4   |
25      |   0  |   4   |   0  |    4  |   3  |   3   |
16      |   3  |   2   |   6  |    1  |   7  |   1   |
------------------------------------------------------

   
 
 автор: bronenos   (01.06.2007 в 15:50)   письмо автору
 
   для: P@Sol   (01.06.2007 в 15:37)
 

типа считать, сортировать и делать таблицу?

   
 
 автор: P@Sol   (01.06.2007 в 15:51)   письмо автору
 
   для: bronenos   (01.06.2007 в 15:50)
 

да:) я уже сделал таблицу

        |    1 тур     |    2 тур     |    3 тур     | 
Команда ---------------------------------------------- 
        | Очки | Место | Очки | Место | Очки | Место | 
------------------------------------------------------ 
2       |   0  |       |   0  |       |   1  |       |
16      |   3  |       |   6  |       |   7  |       |
24      |   3  |       |   3  |       |   6  |       |
25      |   0  |       |   0  |       |   3  |       |
------------------------------------------------------

а вот как вывести места не знаю

   
 
 автор: P@Sol   (01.06.2007 в 18:08)   письмо автору
 
   для: P@Sol   (01.06.2007 в 15:51)
 

для простоты можно команды с одинаковым кол-вом очков писать на одном месте.. или как получиться, в идеале считать кол-во забитых мячей (другой массив)...но это пока не обязательно

   
 
 автор: P@Sol   (04.06.2007 в 10:04)   письмо автору
 
   для: P@Sol   (01.06.2007 в 18:08)
 

кто не подумав перенес тему из php в mysql???? тут вопрос с массивом, а не с бд

   
 
 автор: P@Sol   (04.06.2007 в 10:04)   письмо автору
 
   для: P@Sol   (01.06.2007 в 15:37)
 

раз даже cheops не знает как это сделать (за 3 дня никто не предложил решение), наверное задача не решаемая:(

   
 
 автор: Trianon   (04.06.2007 в 11:10)   письмо автору
 
   для: P@Sol   (04.06.2007 в 10:04)
 

Вы не написали правила, по которым раздаются места. Я, например, не понял, почему в 1-м туре команда 24 опередила команду 16, а команда 2 опередила команду 25.

   
 
 автор: P@Sol   (04.06.2007 в 11:13)   письмо автору
 
   для: Trianon   (04.06.2007 в 11:10)
 

>Вы не написали правила, по которым раздаются места. Я, например, не понял, почему в 1-м туре команда 24 опередила команду 16, а команда 2 опередила команду 25.

чуть выше мое сообщение

автор: P@Sol   (01.06.2007 в 18:08)   письмо автору   
  для простоты можно команды с одинаковым кол-вом очков писать на одном месте.. или как получиться, в идеале считать кол-во забитых мячей (другой массив)...но это пока не обязательно

   
 
 автор: P@Sol   (04.06.2007 в 13:19)   письмо автору
 
   для: P@Sol   (04.06.2007 в 11:13)
 

и Trianon не смог помочь:(

   
 
 автор: Trianon   (04.06.2007 в 13:36)   письмо автору
 
   для: P@Sol   (04.06.2007 в 13:19)
 

Я, в отличие от cheops'а, не люблю решать нечетко поставленные задачи :)
Так что не не смог, а скорее - не захотел :)

   
 
 автор: P@Sol   (04.06.2007 в 13:41)   письмо автору
 
   для: Trianon   (04.06.2007 в 13:36)
 

для четкости: узнать место команды занимаемое после каждого тура. При равенстве очков распределять места по командам в алфавитном порядке.
кол-во очков набранное командами хранится в массиве
Array (
[24] => Array ( [1] => 3 [2] => 0 [3] => 3 [4] => 3 [5] => 3 [6] => 3 )
[2] => Array ( [1] => 0 [2] => 0 [3] => 1 [4] => 3 [5] => 3 [6] => 3 )
[25] => Array ( [1] => 0 [2] => 0 [3] => 3 [4] => 0 [5] => 1 [6] => 0 )
[16] => Array ( [1] => 3 [2] => 3 [3] => 1 [4] => 0 [5] => 0 [6] => 0 )
)

так четче?

   
 
 автор: Trianon   (04.06.2007 в 13:47)   письмо автору
 
   для: P@Sol   (04.06.2007 в 13:41)
 

Да, безусловно. Сейчас поломаю..

   
 
 автор: Trianon   (04.06.2007 в 14:23)   письмо автору
 
   для: Trianon   (04.06.2007 в 13:47)
 


<?
$src 
= Array (
24 => Array ( => 3=> ,=> ,=> ,=> ,=> )
,
=> Array ( => ,=> ,=> ,=> ,=> ,=> )
,
25 => Array ( => ,=> ,=> ,=> ,=> ,=> )
,
16 => Array ( => ,=> ,=> ,=> ,=> ,=> )
);
$commands array_keys($src);
//print_r($commands);
$tours = array();
foreach(
$src as $cmd => $res)
{
  
$acm[$cmd] = 0;
  foreach(
$res as $tour => $point)
      
$tours[$tour]['points'][$cmd]=$point;
}
foreach(
$tours as $tour => $res)
{
    foreach(
$res['points'] as $cmd => $point)
    {
        
$acm[$cmd] += $point;
        
$tours[$tour]['points'][$cmd] = $acm[$cmd];
    }
    
asort($acm);
    
$n 0;
    foreach(
$acm as $cmd =>$point)
       
$ord[$cmd]=++$n;
    
$tours[$tour]['rank']=$ord;
}
{
    echo 
"<table border=1><tr><th> Command </th>";
    foreach(
$tours as $tour => $res)
        echo 
"<th> Tour $tour </th><th> Rank </th>";
    echo 
"</tr>\r\n";
}
foreach(
$commands as $cmd)
{
    echo 
"<tr><th> $cmd </th>";
    foreach(
$tours as $tour => $res)
    {
        
$points $res['points'][$cmd];
        
$rank  $res['rank'][$cmd];
        echo 
"<td> $points </td><td> $rank </td>\r\n";
    }
    echo 
"</tr>\r\n";
}
{
    echo 
"</table>\r\n";
}

//print_r($tours);


?>

   
 
 автор: P@Sol   (04.06.2007 в 14:30)   письмо автору
 
   для: Trianon   (04.06.2007 в 14:23)
 

не хило... круто, круто... спасибо буду пробовать

   
 
 автор: P@Sol   (04.06.2007 в 17:58)   письмо автору
 
   для: Trianon   (04.06.2007 в 14:23)
 

работает, тольо arsort($acm); надо использовать:)

   
 
 автор: Trianon   (04.06.2007 в 18:25)   письмо автору
 
   для: P@Sol   (04.06.2007 в 17:58)
 

должен же я был оставить что-нибудь на самостоятельную проработку :)

   
 
 автор: P@Sol   (04.06.2007 в 21:20)   письмо автору
 
   для: Trianon   (04.06.2007 в 18:25)
 

возможно привязку к забитым мячам сделать? весь вечер просидел с этой задачкой:(

   
 
 автор: Trianon   (04.06.2007 в 21:22)   письмо автору
 
   для: P@Sol   (04.06.2007 в 21:20)
 

были б данные в массиве.

   
 
 автор: P@Sol   (04.06.2007 в 21:32)   письмо автору
 
   для: Trianon   (04.06.2007 в 21:22)
 

у Вас время есть? может я изначально не правильным путем пошел? может задачу с самого начало рассказать?

   
 
 автор: Trianon   (04.06.2007 в 22:10)   письмо автору
 
   для: P@Sol   (04.06.2007 в 21:32)
 

>у Вас время есть?

конечно же нет! :)

   
 
 автор: P@Sol   (04.06.2007 в 18:34)   письмо автору
 
   для: Trianon   (04.06.2007 в 14:23)
 

сортировка по местам странная:) не по алфавиту получилось, но все равно круто... счас хочу еще придумать как сделать сортировку мест сначало по забитым мячам, а потом по победам..если что я к вам

   
 
 автор: P@Sol   (05.06.2007 в 10:56)   письмо автору
 
   для: P@Sol   (01.06.2007 в 15:37)
 

результаты хранятся в res.txt

#тур,счет,ид1,ид2
1:2-0:24:2
1:1-2:25:16
1:0-2:12:19
1:1-0:11:21
1:0-0:3:20
1:0-2:4:22
1:1-0:9:0
1:2-0:17:27
###
2:2-1:0:24
2:0-3:12:22
2:1-3:25:20
2:0-3:21:9
2:2-0:17:2
2:0-1:27:3
2:1-0:16:4
2:0-1:19:11
###
и т.д.


вот код обработки:

<?
Error_Reporting
(E_ALL & ~E_NOTICE);

$stats file("res.txt");

foreach(
$stats as $stat)
  {
    if (
$stat[0] == "#")
       continue;

    
$team1s=0;
    
$team2s=0;

    
$teamst explode(":",$stat);
    
$teamst1 explode(";",$teamst[2]);
    
$teamst2 explode(";",$teamst[3]);

    
$goal explode("-",$teamst[1]);

    if (
$goal[0] > $goal[1])
    {
            
$p1 3;
            
$p2 0;
    }
    else if (
$goal[0] < $goal[1])
    {
            
$p1 0;
            
$p2 3;
    }
    else if (
$goal[0] == $goal[1])
    {
            
$p1 1;
            
$p2 1;
    }
    
$teamsum2["$teamst1[0]"][$teamst[0]] = $p1;
    
$teamsum2["$teamst2[0]"][$teamst[0]] = $p2;
  }

$commands array_keys($teamsum2); 
sort($commands);

$tours = array(); 
foreach(
$teamsum2 as $cmd => $res

  
$acm[$cmd] = 0
  foreach(
$res as $tour => $point
      
$tours[$tour]['points'][$cmd]=$point


foreach(
$tours as $tour => $res

    foreach(
$res['points'] as $cmd => $point
    { 
        
$acm[$cmd] += $point
        
$tours[$tour]['points'][$cmd] = $acm[$cmd]; 
    }
  
    
arsort($acm); 

    
$n 0
    foreach(
$acm as $cmd =>$point
       
$ord[$cmd]=++$n
    
$tours[$tour]['rank']=$ord


    echo 
"<table border=1><tr><th> Command </th>"
    foreach(
$tours as $tour => $res
        echo 
"<th> Tour $tour </th><th> Rank </th>"
    echo 
"</tr>\r\n"

foreach(
$commands as $cmd

    echo 
"<tr><td> $team[$cmd] </td>"
    foreach(
$tours as $tour => $res
    { 
        
$points $res['points'][$cmd]; 
        
$rank  $res['rank'][$cmd]; 
        echo 
"<td> $points </td><td> $rank </td>\r\n"
    } 
    echo 
"</tr>\r\n"


    echo 
"</table>\r\n"

?>

в итоге надо получить таблицу, где указаны места команд по турам, при равенстве очков учитывать разницу мяцей, а при равенстве разницы учитывать кол-во забитых мячей.

я думал будет просто учесть мячи, когда уже будет хоть как то выводить...оказалось, я не могу этого сделать

   
 
 автор: Trianon   (05.06.2007 в 11:59)   письмо автору
 
   для: P@Sol   (05.06.2007 в 10:56)
 

каков смысл вот этих разбиений?
$teamst1 = explode(";",$teamst[2]);
$teamst2 = explode(";",$teamst[3]);

   
 
 автор: P@Sol   (05.06.2007 в 12:18)   письмо автору
 
   для: Trianon   (05.06.2007 в 11:59)
 

краснея, забыл удалить, это от другого скрипта осталось

   
 
 автор: Disable   (05.06.2007 в 14:41)   письмо автору
 
   для: P@Sol   (05.06.2007 в 12:18)
 

Делал я такое, используйте базу данных, это ОЧЕНЬ облегчает сортировку и вывод всякой разной статистики.

Потребуется всего одна таблица в базе (и одна будет создаваться как "временная", или 2 обычных), но это еще без учета таблицы для календаря (про который вы не упоминали).

Еще надо использовать кэширование страниц на сервере, так как итоговая таблица изменяется только при очередном матче, и нет смысла пересчитывать ее при каждом запросе.

Когда вам понадобится сделать статистику по КАЖДОЙ команде, по итогам чемпионата, тура итп, вы поймете, что использование файла для хранения данных провальная затея :)

   
 
 автор: P@Sol   (05.06.2007 в 15:51)   письмо автору
 
   для: Disable   (05.06.2007 в 14:41)
 

тогда придеться писать скрипт перегона из тхт в мускул:) мне файлы присылают разные люди:(

привидите структуру вашей таблица, пожалуйста

   
 
 автор: Disable   (05.06.2007 в 17:11)   письмо автору
 
   для: P@Sol   (05.06.2007 в 15:51)
 

$q[0]="CREATE TABLE football (tur int(2) not null,
_1 int(2) not null,
_2 int(2) not null,
st_1 enum('0','1'),
st_2 enum('0','1'),
in_1 int(2),
in_2 int(2),
out_1 int(2),
out_2 int(2),
diff_1 int(2),
diff_2 int(2),
win_1 int(2),
win_2 int(2),
lose_1 int(2),
lose_2 int(2),
tauth_1 int(2),
tauth_2 int(2),
point_1 int(2),
point_2 int(2),
pos_1 int(2),
pos_2 int(2),
pass enum('0','1'),
date int(10) ) type=myisam ";

$q[1]="CREATE TABLE tur_tmp ( _c int(2) not null,
matches int(2),
in_g int(2),
out_g int(2),
diff int(2),
win int(2),
lose int(2),
tauth int(2),
point int(2) ) type=myisam ";

она получилась на первый взгляд избыточной, но еще до конца не определились что выводить, а что нет

st_1 это дома/в гостях
pass enum('0','1'), это для перенесенных матчей флаг

после матча просто заполняется таблица 1, и строится таблица 2 (по результатам сортировки второй таблицы выводятся места).

   
 
 автор: P@Sol   (05.06.2007 в 22:44)   письмо автору
 
   для: Disable   (05.06.2007 в 17:11)
 

не до конца понял для чего какое поле:( можете для каждого комментарий дать?

   
 
 автор: Disable   (05.06.2007 в 23:01)   письмо автору
 
   для: P@Sol   (05.06.2007 в 22:44)
 

все забивается для ОДНОГО матча


_1 int(2) not null, это ид первой команды
_2 int(2) not null, это ид второй команды
st_1 enum('0','1'), это дома/в гостях для первой команды (0 это дома, команда первая)
st_2 enum('0','1'), это дома/в гостях для второй команды
in_1 int(2), это сколько забила первая команда
in_2 int(2), это сколько забила вторая команда
out_1 int(2), это сколько проопустила ревая команда
out_2 int(2),
diff_1 int(2), это разница мячей для первой команда
diff_2 int(2),
win_1 int(2), это победа первой команды (0 или 1), не знаю почему не через enum :)
win_2 int(2),
lose_1 int(2), это поражение второй команды (0 или 1)
lose_2 int(2),
tauth_1 int(2), это ничья первой команды (0 или 1)
tauth_2 int(2),
point_1 int(2), это очки первой команды (0 , 1 или 3)
point_2 int(2),
pos_1 int(2), это место первой команды (потом пересчитывается)
pos_2 int(2),
pass enum('0','1'), это флаг перенесенного матча
date int(10) ) type=myisam ";

потом выводится временная таблица, в которой очки, победы итп суммируются по результатам матчей, для выяснения позиций временная таблица сортируется

   
 
 автор: P@Sol   (06.06.2007 в 16:05)   письмо автору
 
   для: P@Sol   (01.06.2007 в 15:37)
 

соединил оба способа:)

<?
Error_Reporting
(E_ALL & ~E_NOTICE);

$dblocation "localhost";
  
$dbname "vsol";
  
$dbuser "root";
  
$dbpasswd "";

   
// Устанавливаем соединение с сервером базы данных
  
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!
$dbcnx)
  {
    
puterror("В настоящий момент сервер базы данных не доступен,
              поэтому корректное отображение страницы невозможно."
);
  }
  
// Выбираем базу данных
  
if (! @mysql_select_db($dbname,$dbcnx))
  {
    
puterror("В настоящий момент база данных не доступна, поэтому
              корректное отображение страницы невозможно."
);
  }
  @
mysql_query("SET NAMES 'cp1251'");


  
$query "DROP TABLE games";
  
$drop mysql_query($query);
  
$query "CREATE TABLE `games` (
`id` TINYINT( 2 ) UNSIGNED NOT NULL ,
`matches` TINYINT( 2 ) NOT NULL ,
`in_g` TINYINT( 2 ) NOT NULL ,
`out_g` TINYINT( 2 ) NOT NULL ,
`diff` TINYINT( 2 ) NOT NULL ,
`win` TINYINT( 2 ) NOT NULL ,
`lose` TINYINT( 2 ) NOT NULL ,
`draw` TINYINT( 2 ) NOT NULL ,
`point` TINYINT( 2 ) NOT NULL ,
PRIMARY KEY ( `id` )
)"
;
  
$create mysql_query($query);
  for (
$i=0$i<33$i++)
  {
       
$query "insert into `games` values ('$i','','','','','','','','')";
       
$sel mysql_query($query);
  }

$stats file("match.txt");

foreach(
$stats as $stat)
  {
    
$n=0;
    
$i=0;
    if (
$stat == "###\r\n")  {
  
$query "Select `id`, `matches`, `point` from `games` order by `point` DESC, `matches`, `diff` DESC, `in_g` DESC, `win` DESC, `id`";
  
$sel mysql_query($query);
  if(
$sel)
  {
    while(
$tbl mysql_fetch_array($sel))
     if (
$tbl['matches']>0)
     {
         
$tours[$tbl['matches']]['points'][$tbl['id']] = $tbl['point'];

         
$ord[$tbl['id']]=++$n;
         
$tours[$tbl['matches']]['rank'][$tbl['id']] = $ord[$tbl['id']];
         if(!
in_array($tbl['id'],$commands))
         {
             
$commands[$i] = $tbl['id'];
             
$i++;
         }
     }
  } else echo 
"Ошибка при выборке новых значений";
  }
    if (
$stat[0] == "#")
       continue;
 
/*   else if ($stat[0] == "3")
       break;     */
    
$team1s=0;
    
$team2s=0;

    
$teamst explode(":",$stat);
    
$teamst1 explode(";",$teamst[2]);
    
$teamst2 explode(";",$teamst[3]);

    
$goal explode("-",$teamst[1]);

    if (
$goal[0] > $goal[1])
    {
            
$p1 3;
            
$p2 0;
            
$w1 $l2 1;
            
$d1 $d2 0;
            
$l1 $w2 0;
    }
    else if (
$goal[0] < $goal[1])
    {
            
$p1 0;
            
$p2 3;
            
$w1 $l2 0;
            
$d1 $d2 0;
            
$l1 $w2 1;
    }
    else if (
$goal[0] == $goal[1])
    {
            
$p1 1;
            
$p2 1;
            
$w1 $l2 0;
            
$d1 $d2 1;
            
$l1 $w2 0;
    }
    
$diff1 $goal[0]-$goal[1];
    
$diff2 $goal[1]-$goal[0];

  
$query "Select * from `games` where `id` = $teamst1[0]";
  
$sel mysql_query($query);
  if(
$sel)
  {
    while(
$tbl mysql_fetch_array($sel))
    {
           
$matches1 $tbl['matches'] + 1;
           
$in_g1 $tbl['in_g'] + $goal[0];
           
$out_g1 $tbl['out_g'] + $goal[1];
           
$diff1 $tbl['diff'] + $diff1;
           
$win1 $tbl['win'] + $w1;
           
$lose1 $tbl['lose'] + $l1;
           
$draw1 $tbl['draw'] + $d1;
           
$point1 $tbl['point'] + $p1;
    }
  } else echo 
"Ошибка при выборке предыдущих значений";
  
$query "Select * from `games` where `id` = $teamst2[0]";
  
$sel mysql_query($query);
  if(
$sel)
  {
    while(
$tbl mysql_fetch_array($sel))
    {
           
$matches2 $tbl['matches'] + 1;
           
$in_g2 $tbl['in_g'] + $goal[1];
           
$out_g2 $tbl['out_g'] + $goal[2];
           
$diff2 $tbl['diff'] + $diff2;
           
$win2 $tbl['win'] + $w2;
           
$lose2 $tbl['lose'] + $l2;
           
$draw2 $tbl['draw'] + $d2;
           
$point2 $tbl['point'] + $p2;
    }
  } else echo 
"Ошибка при выборке предыдущих значений";

  
$query "UPDATE `games` SET `matches` = '$matches1',
                               `in_g` = '
$in_g1',
                               `out_g` = '
$out_g1',
                               `diff` = '
$diff1',
                               `win` = '
$win1',
                               `lose` = '
$lose1',
                               `draw` = '
$draw1',
                               `point` = '
$point1'
                        where `id` = '
$teamst1[0]'";
  
$up1 mysql_query($query);
//echo $query."<br>";
  
$query "UPDATE `games` SET `matches` = '$matches2',
                               `in_g` = '
$in_g2',
                               `out_g` = '
$out_g2',
                               `diff` = '
$diff2',
                               `win` = '
$win2',
                               `lose` = '
$lose2',
                               `draw` = '
$draw2',
                               `point` = '
$point2'
                        where `id` = '
$teamst2[0]'";
  
$up2 mysql_query($query);
//echo $query."<br>";

  
}


{
    echo 
"<table border=1><tr><th> Command </th>";
    foreach(
$tours as $tour => $res)
        echo 
"<th> Tour $tour </th><th> Rank </th>";
    echo 
"</tr>\r\n";
}
sort($commands);
foreach(
$commands as $cmd)
{
    echo 
"<tr><td> $cmd</td>";
    foreach(
$tours as $tour => $res)
    {
        
$points $res['points'][$cmd];
        
$rank  $res['rank'][$cmd];
        echo 
"<td> $points </td><td> $rank </td>\r\n";
    }
    echo 
"</tr>\r\n";
}

{
    echo 
"</table>\r\n";
}

?>


осталось два вопроса
1: приходится создавать и удалять таблицу, буду исправлять
2: как инициализировать массив $commands, а то вначале выводится ошикбка Warning: in_array(): Wrong datatype for second argument?

   
 
 автор: P@Sol   (07.06.2007 в 12:23)   письмо автору
 
   для: P@Sol   (06.06.2007 в 16:05)
 

сам не догодался как можно решить оба этих вопроса. жду помощи

   
 
 автор: cheops   (07.06.2007 в 13:13)   письмо автору
 
   для: P@Sol   (07.06.2007 в 12:23)
 

2) in_array() принимает в качестве второго аргумента массив, поэтому следует проверять - является ли он массивом
<?php
if(!empty($commands) && is_array($commands))
        if(!
in_array($tbl['id'],$commands)) 
         { 
             
$commands[$i] = $tbl['id']; 
             
$i++; 
         }
?>

   
 
 автор: P@Sol   (07.06.2007 в 13:26)   письмо автору
 
   для: cheops   (07.06.2007 в 13:13)
 

так изначально он полюбому будет пустой:( вот когда он первый раз попадает в эту строку ошибка и возникает, при последующих заходах ошибки уже нет, что логично. Вот и возник у меня вопрос как инициализировать вначале этот массив

   
 
 автор: Trianon   (07.06.2007 в 13:58)   письмо автору
 
   для: P@Sol   (07.06.2007 в 13:26)
 

если Вы вот эту фразу

итоге надо получить таблицу, где указаны места команд по турам, при равенстве очков учитывать разницу мяцей, а при равенстве разницы учитывать кол-во забитых мячей.

раскроете более подробно, можно будет над этим подумать.

Что такое разница мячей я еще понять могу,
но что значит "учитывать кол-во забитых мячей" и чем оно отличается от разницы - для меня - нефутболиста в общем-то - не доходит.
Равно как непонятно, чем игра отличается от тура, а если отличается - за игру или за тур учитывать.

   
 
 автор: P@Sol   (07.06.2007 в 16:53)   письмо автору
 
   для: Trianon   (07.06.2007 в 13:58)
 

получиться должно вот это

sql запрос в данном случае

$query = "Select * from table order by `point` DESC, `matches`, `diff` DESC, `in_g` DESC, `win` DESC, `id`";


разница мячей = забитые мячи - пропущенные
в туре проходит 8 игр, но для каждой команды 1 тур = 1 игра

в массивах такое сделать мне кажется очень-очень сложно, если не возможно

   
 
 автор: Trianon   (07.06.2007 в 18:19)   письмо автору
 
   для: P@Sol   (07.06.2007 в 16:53)
 


<?

$rep 
'1:2-0:24:2
1:1-2:25:16
1:0-2:12:19
1:1-0:11:21
1:0-0:3:20
1:0-2:4:22
1:1-0:9:0
1:2-0:17:27
###
2:2-1:0:24
2:0-3:12:22
2:1-3:25:20
2:0-3:21:9
2:2-0:17:2
2:0-1:27:3
2:1-0:16:4
2:0-1:19:11
###'
;

//$stats = file("res.txt");
$stats explode("\r\n"$rep);

foreach(
$stats as $stat)
  {
    
$stat trim($stat);
    if (
$stat[0] == "#")
       continue;

    
$team1s=0;
    
$team2s=0;

    
$teamst explode(":",$stat);
    
$teamst1 $teamst[2];
    
$teamst2 $teamst[3];

    
$goal explode("-",$teamst[1]);
    
$goal[0] = intval($goal[0]);
    
$goal[1] = intval($goal[1]);

    if (
$goal[0] > $goal[1])
    {
            
$p1 3;
            
$p2 0;
    }
    else if (
$goal[0] < $goal[1])
    {
            
$p1 0;
            
$p2 3;
    }
    else if (
$goal[0] == $goal[1])
    {
            
$p1 1;
            
$p2 1;
    }
    
$tours[$teamst[0]]['points'][$teamst1] = $p1;
    
$tours[$teamst[0]]['points'][$teamst2] = $p2;
    
$tours[$teamst[0]]['goals'][$teamst1] = $goal[0];
    
$tours[$teamst[0]]['goals'][$teamst2] = $goal[1];
    
$tours[$teamst[0]]['diffs'][$teamst1] = $goal[0]-$goal[1];
    
$tours[$teamst[0]]['diffs'][$teamst2] = $goal[1]-$goal[0];
    
$src[$teamst1][$teamst[0]] = $p1;
    
$src[$teamst2][$teamst[0]] = $p2;
  }

$commands array_keys($src);
//print_r($commands);
//$tours = array();
foreach($src as $cmd => $res)
{
  
$acm[$cmd] = array('points'=>0'diffs'=>0'goals'=>0);
}
function 
compare_rank($a$b)
{
    return ((
$a['points']- $b['points']) ? ($a['points'] - $b['points']) :
           ((
$a['diffs']- $b['diffs']) ? ($a['diffs'] - $b['diffs']) :
           ((
$a['goals']- $b['goals']) ? ($a['goals'] - $b['goals']) :
           
0)));
}

foreach(
$tours as $tour => $res)
{
    foreach(
$res['points'] as $cmd => $point)
    {
        
$acm[$cmd]['points'] += $point;
        
$acm[$cmd]['diffs'] += $res['diffs'][$cmd];
        
$acm[$cmd]['goals'] += $res['goals'][$cmd];
        
$tours[$tour]['points'][$cmd] = $acm[$cmd];
    }
    
uasort($acm'compare_rank');


    
$n 0;
    foreach(
$acm as $cmd =>$point)
       
$ord[$cmd]=++$n;
    
$tours[$tour]['rank']=$ord;
}
{
    echo 
"<table border=1><tr><th> Command </th>";
    foreach(
$tours as $tour => $res)
        echo 
"<th> Tour $tour </th><th> Rank </th>";
    echo 
"</tr>\r\n";
}
foreach(
$commands as $cmd)
{
    echo 
"<tr><th> $cmd </th>";
    foreach(
$tours as $tour => $res)
    {
        
$points $res['points'][$cmd]['points'];
        
$rank  $res['rank'][$cmd];
        echo 
"<td> $points </td><td> $rank </td>\r\n";
    }
    echo 
"</tr>\r\n";
}
{
    echo 
"</table>\r\n";
}

//print_r($tours);


?>

   
 
 автор: P@Sol   (07.06.2007 в 22:17)   письмо автору
 
   для: Trianon   (07.06.2007 в 18:19)
 

ты гений:)

   
 
 автор: P@Sol   (18.06.2007 в 16:58)   письмо автору
 
   для: Trianon   (07.06.2007 в 18:19)
 

пользовательскую функцию переписал:)

function compare_rank($a, $b)
{
    return (($b['points']- $a['points']) ? ($b['points'] - $a['points']) :
           (($b['diffs']- $a['diffs']) ? ($b['diffs'] - $a['diffs']) :
           (($b['goals']- $a['goals']) ? ($b['goals'] - $a['goals']) :
           0)));
}

а как еще добавить если 'points, 'diffs' и 'goals' равны, то сортировать по ИД?

   
 
 автор: Trianon   (18.06.2007 в 17:05)   письмо автору
 
   для: P@Sol   (18.06.2007 в 16:58)
 

Вы чего?

function compare_rank($a, $b) 

    return (($b['points']- $a['points']) ? ($b['points'] - $a['points']) : 
           (($b['diffs']- $a['diffs']) ? ($b['diffs'] - $a['diffs']) : 
           (($b['goals']- $a['goals']) ? ($b['goals'] - $a['goals']) : 
           (($b['id']- $a['id']) ? ($b['id'] - $a['id']) : 
           0)))); 



        $acm[$cmd]['id'] = 0+$cmd; 

   
 
 автор: P@Sol   (18.06.2007 в 17:16)   письмо автору
 
   для: Trianon   (07.06.2007 в 18:19)
 

еще добавил строки


    $tours[$teamst[0]]['diffs'][$teamst1] = $goal[0]-$goal[1];
    $tours[$teamst[0]]['diffs'][$teamst2] = $goal[1]-$goal[0];
    $tours[$teamst[0]]['win'][$teamst1] = $w1;
    $tours[$teamst[0]]['win'][$teamst2] = $w2;

....

function compare_rank($a, $b)
{
    return (($b['points']- $a['points']) ? ($b['points'] - $a['points']) :
           (($b['diffs']- $a['diffs']) ? ($b['diffs'] - $a['diffs']) :
           (($b['goals']- $a['goals']) ? ($b['goals'] - $a['goals']) :
           (($b['win']- $a['win']) ? ($b['win'] - $a['win']) : //74 строка
           (($a['id']- $b['id']) ? ($a['id'] - $b['id']) :
           0)))));
}
....

        $acm[$cmd]['id'] = 0+$cmd;
        $acm[$cmd]['win'] += $res['win'][$cmd];
  //108 строка


почему-то вылазит ошибка Notice: Undefined index: win in z:\home\localhost\www\index6.php on line 108

   
 
 автор: P@Sol   (18.06.2007 в 17:35)   письмо автору
 
   для: P@Sol   (18.06.2007 в 17:16)
 

разобрался:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования