Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Можно делать этот код короче?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Задание с arrays
Valeriya12
Отправлено: 06 Марта, 2014 - 16:29:59
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




(Извините заранее за мой хромающий русский ;) )

Привет! Я смогла совершить мое домашнее задание. Хотя, код вышел очень длинный по-моему. Я хотела спросить совет от экспертов... можно делать этот код короче?

Мое задание такое:

1st Array - футбольные матчи (или команды)
2nd Array - результаты (номер голов) этих матчей

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

Я совершила это с 7 arrays!! Не понял Такое ощущение, что это чересчур.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $winningteam=array();
  3. $losingteam=array();
  4. $drawingteam=array();
  5. $gap=array();
  6. $firstmerge=array();
  7. $secondmerge=array();
  8. $final=array();
  9. $counter=0;
  10. $games=array("Spartak", "CSKA", "Zenit", "Lokomotiv", "Rubin", "Alania", "Rotor", "Dynamo", "Torpedo", "Krylia", "Anzhi", "Kuban", "Terek", "Ural");
  11. $results=array(4, 3, 3, 1, 2, 1, 1, 1, 5, 2, 6, 0, 0, 0);
  12.  
  13. for ($x=0; $x<=6;$x++)
  14. {
  15. if ($results[$counter] > $results[$counter+1])
  16. {
  17. $winningteam[]=$games[$counter];
  18. $losingteam[]=$games[$counter+1];
  19. $gap[]=($results[$counter]-$results[$counter+1]);
  20. $gap[]=($results[$counter+1]-$results[$counter]);
  21. }
  22. if ($results[$counter] == $results[$counter+1])
  23. {
  24. $drawingteam[]=$games[$counter];
  25. $drawingteam[]=$games[$counter+1];
  26. $gap[]=0;
  27. $gap[]=0;
  28. }
  29. if ($results[$counter] < $results[$counter+1])
  30. {
  31. $losingteam[]=$games[$counter];
  32. $winningteam[]=$games[$counter+1];
  33. $gap[]=($results[$counter+1]-$results[$counter]);
  34. $gap[]=($results[$counter]-$results[$counter+1]);
  35. }
  36. $counter++;
  37. $counter++;
  38. }
  39. $firstmerge = array_merge($winningteam, $drawingteam);
  40. $secondmerge = array_merge($firstmerge, $losingteam);
  41. sort($gap, SORT_NUMERIC);
  42. $gap = array_reverse($gap, true);
  43. $final = array_combine($secondmerge, $gap);
  44. print_r($final);
  45. ?>


И получаю output:

CODE (text):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [Spartak] => 6
  4.     [Zenit] => 3
  5.     [Rubin] => 2
  6.     [Torpedo] => 1
  7.     [Anzhi] => 1
  8.     [Rotor] => 0
  9.     [Dynamo] => 0
  10.     [Terek] => 0
  11.     [Ural] => 0
  12.     [CSKA] => -1
  13.     [Lokomotiv] => -1
  14.     [Alania] => -2
  15.     [Krylia] => -3
  16.     [Kuban] => -6
  17. )
 
 Top
OrmaJever Модератор
Отправлено: 06 Марта, 2014 - 16:39:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Valeriya12 пишет:
$games=array("Spartak", "CSKA", "Zenit", "Lokomotiv", "Rubin", "Alania", "Rotor", "Dynamo", "Torpedo", "Krylia", "Anzhi", "Kuban", "Terek", "Ural");
$results=array(4, 3, 3, 1, 2, 1, 1, 1, 5, 2, 6, 0, 0, 0);

Как я понимаю результаты стоят в порядке команд? То есть у спартака - 4, у цск - 3? А почему тогда у вас в выводе спартак - 6, цск -1? Или я как-то не правильно понял?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Valeriya12
Отправлено: 06 Марта, 2014 - 16:58:07
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




OrmaJever пишет:
Как я понимаю результаты стоят в порядке команд? То есть у спартака - 4, у цск - 3? А почему тогда у вас в выводе спартак - 6, цск -1? Или я как-то не правильно понял?


Значит я не хорошо объяснила.

Эти номера - разница между результатов

То есть

Spartak VS CSKA
Spartak -> 4 голи
CSKA -> 3 голи
Spartak выиграла
Разница между результатами: 4-3=1


В итоге
Spartak +1
CSKA -1

Но я только что заметила-- у меня есть ошибка. Порядок не так. У Spartaka есть +6 а не +1... блин. Нужно подумать как исправить это Хм

(Отредактировано автором: 06 Марта, 2014 - 16:58:36)

 
 Top
OrmaJever Модератор
Отправлено: 06 Марта, 2014 - 17:03:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




оно?
PHP:
скопировать код в буфер обмена
  1. $games=array("Spartak", "CSKA", "Zenit", "Lokomotiv", "Rubin", "Alania", "Rotor", "Dynamo", "Torpedo", "Krylia", "Anzhi", "Kuban", "Terek", "Ural");
  2. $results=array(4, 3, 3, 1, 2, 1, 1, 1, 5, 2, 6, 0, 0, 0);
  3. $res = array();
  4.  
  5. for($i=0; $i<count($games)/2; ++$i) {
  6.         $res[$games[$i*2]] = $results[$i*2] - $results[$i*2+1];
  7.         $res[$games[$i*2+1]] = $results[$i*2+1] - $results[$i*2];
  8. }
  9.  
  10. arsort($res, SORT_NUMERIC);
  11. print_r($res);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Valeriya12
Отправлено: 06 Марта, 2014 - 17:58:42
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Да, оно!
"arsort" ОЧЕНЬ помогает!! Не думала, что этот команд работает потому, что является черным в моем редакторе (или эдиторе?), а не синим..

Благодаря Вам я вгляделась глубже в мой код и исправила мои ошибки. Так что, мой код теперь не только правильный но и короче! Хотя, не так короткий как у Вас! Вот это да. Мне нужно немножко времени чтоб понять точно что Вы сделали Улыбка Может быть я еще оставлю здесь сообщение если возникнут недоразумения. Так или иначе-- СПАСИБО БОЛЬШОЕ!

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $gap=array();
  3. $final=array();
  4. $counter=0;
  5. $games=array("Spartak", "CSKA", "Zenit", "Lokomotiv", "Rubin", "Alania", "Rotor", "Dynamo", "Torpedo", "Krylia", "Anzhi", "Kuban", "Terek", "Ural");
  6. $results=array(4, 3, 3, 1, 2, 1, 1, 1, 5, 2, 6, 0, 0, 0);
  7.  
  8. for ($x=0; $x<=6;$x++)
  9. {
  10. if ($results[$counter] > $results[$counter+1])
  11. {
  12. $gap[]=($results[$counter]-$results[$counter+1]);
  13. $gap[]=($results[$counter+1]-$results[$counter]);
  14. }
  15. if ($results[$counter] == $results[$counter+1])
  16. {
  17. $gap[]=0;
  18. $gap[]=0;
  19. }
  20. if ($results[$counter] < $results[$counter+1])
  21. {
  22. $gap[]=($results[$counter+1]-$results[$counter]);
  23. $gap[]=($results[$counter]-$results[$counter+1]);
  24. }
  25. $counter++;
  26. $counter++;
  27. }
  28. $final = array_combine($games, $gap);
  29. arsort($final, SORT_NUMERIC);
  30. print_r($final);
  31.  
  32. ?>

(Отредактировано автором: 06 Марта, 2014 - 18:02:18)

 
 Top
OrmaJever Модератор
Отправлено: 06 Марта, 2014 - 18:27:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Или даже так, если мы хотим ещё немного сократить
PHP:
скопировать код в буфер обмена
  1. $games=array("Spartak", "CSKA", "Zenit", "Lokomotiv", "Rubin", "Alania", "Rotor", "Dynamo", "Torpedo", "Krylia", "Anzhi", "Kuban", "Terek", "Ural");
  2. $results=array(4, 3, 3, 1, 2, 1, 1, 1, 5, 2, 6, 0, 0, 0);
  3.  
  4. for($i=0; $i<count($games)/2; ++$i) $res[$games[$i*2+1]] = -$res[$games[$i*2]] = $results[$i*2] - $results[$i*2+1];
  5.  
  6. arsort($res, SORT_NUMERIC);
  7. print_r($res);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB