За последние 24 часа нас посетили 60858 программистов и 1772 робота. Сейчас ищут 927 программистов ...

Foreach в работе с двумя массивами

Тема в разделе "PHP для новичков", создана пользователем Igorbay, 14 апр 2016.

  1. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Постигая азы, решил попрактиковаться стая себе свои задачи исходя из своего уровня.
    Задачу поставил следующую:
    Турнирная таблица футбольных команд. Для начал хотелось бы посчитать очки исходя из результата игры. За результат игры отвечают два массива. Точнее их значения. Ключ - это один матч. 5 ключей = 5 игр. В примере указаны следующие результаты (1:0, 0:0, 3:0, 1:3, 0:4)

    $clubZabGoly = array (1=>1, 2=>0, 3=>3, 4=>1, 5=>0);
    $clubPropGoly = array (1=>0, 2=>0, 3=>0, 4=>3, 5=>4);

    У команды сейчас - 7 очков (за победу 3 очка, за ничью 1 очко, за поражение 0 очков).
    Логика такая, если "забитыеГолыКлуба" больше "пропущенныхГоловКлуба", к переменной "очки" добавляем 3, в противном случае если голы равны, прибавляем 1, в противном случае 0.



    Примерно вижу вот такой код, но заведомо знаю, что это не верно. подскажите куда копать.

    Код (Text):
    1. function ochki ($array) {
    2.     $ochki = 0;
    3.     $clubZabGoly = 0;
    4.     $clubPropGoly = 0;
    5.     foreach ($array as $k => $v) {
    6.         if (clubZabGoly > $clubPropGoly) {
    7.             $ochki += 3;
    8.             } else if ($clubZabGoly == $clubPropGoly) {
    9.                 $ochki += 1;
    10.             } else {$ochki = 0;}
    11.     }
    12.     return $ochki;
    13. }
     
  2. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Тут больше цикл FOR подходит, а не FOREACH. А вообще, я бы всё в одном массиве сделал. Зачем вам два?
     
  3. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    я делал так. ставишь палец на каждую строчку и пишешь, что она делает и зачем. вот когда это проделано, можно говорить, куда копать. пока из кода видно, что clubZabGoly и clubPropGoly не меняются.
     
  4. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Дело в том, что команд будет много (15 например).
    И нужен какой-либо порядок. Например, что-бы каждый ключ отвечал за отдельный тур (0[1 тур], 1[2 тур], 2[3 тур]).
    Тогда можно будет связывать массивы (забитых и пропущенных голов) логически.
    Была мысль создавать отдельно взятый массив для каждой отдельной игры, но тоже ни чего не вышло.
    Еще раз повторюсь, эти задания для освоения ПХП и его возможностей. В процессе столкнулся с данной задачей и понял, что foreach, работает только с одним массивом, а перебирать с помощью него два разных массива и еще и сравнивать их значения не получится. Во всяком случае сейчас. Вот и спрашиваю... возможно действительно это тупик. А так, я рассмотрю любые варианты, мне это все сейчас полезно.

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

    Про вариант FOR, не понял. Так как он не разделяет на ключ и значение. Просветите, буду рад.
     
  5. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    в исходных начальных данных и с for можно попробовать так
    PHP:
    1. function ochki ($clubZabGoly, $clubPropGoly) {
    2.     $ochki = 0;
    3.     for ($index = 0; $index < count($clubPropGoly); $index++) {
    4.         if ($clubZabGoly[$index] > $clubPropGoly[$index]) {
    5.             $ochki += 3;
    6.             } else if ($clubZabGoly[$index] == $clubPropGoly[$index]) {
    7.                 $ochki += 1;
    8.             } else {
    9.                  $ochki = 0;
    10.             }
    11.     }
    12.     return $ochki;
    13. }
    14.  
    15. $clubZabGoly = array (1=>1, 2=>0, 3=>3, 4=>1, 5=>0);
    16. $clubPropGoly = array (1=>0, 2=>0, 3=>0, 4=>3, 5=>4);
    17.  
    18. $ochki = ochki ($clubZabGoly, $clubPropGoly);
    19.  
    20. var_dump($ochki);
     
  6. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Спасибо. Код работает, но считает не верно. Хотя в вышеуказанном массиве все сработало = 5 очков, как и должно быть.
    Но стоит изменить значение, например
    Код (Text):
    1. $clubZabGoly = array (1 => 2, 2 => 1, 3 => 3, 4 => 4, 5 => 1);
    2. $clubPropGoly = array (1 => 0, 2 => 0, 3 => 1, 4 => 2, 5 => 0);
    и результат уже не правильный, вместо 15 - 13 очков.
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. function ochki($zab, $prop) {
    2.   $score=0;
    3.   foreach($zab as $i=>$v) {
    4.     $score += ( $zab[$i]>$prop[$i] ? 3 : ($zab[$i]==$prop[$i] ? 1 : 0 )  );
    5.   }//for
    6.   return $score;
    7. }
    8. $clubZabGoly = array(1=>2,2=>1,3=>3,4=>4,5=>1);
    9. $clubPropGoly= array(1=>0,2=>0,3=>1,4=>2,5=>0);
    10. echo ochki($clubZabGoly,$clubPropGoly); // 15
     
    Igorbay нравится это.
  8. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Отлично. Все работает верно.
    Еще хотелось бы понять логику:
    - Например почему в foreach, вместо $k идет $i?
    - Почему в foreach, перебирается лишь первый массив $zab as $i=>$v?
    - Почему в условии у массивов берется [$i], ведь по логике вещей - это ключи, а не значения. А очки рассчитываются исходя из сравнения значений.

    А так все понятно. Спасибо.
     
  9. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Парвиз нравится это.
  10. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Понятно стало то что вместо $k или $v можно поставлять любые произвольные переменные.
    Но что касается третьего моего замечания, то вопрос остается открытым и в мануале не разбирается. [$i] в примере - @runcore, является ключом. Или все же значением?
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Igorbay $i ключ, просто код надеется, что в другом массиве будет этот ключ
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Igorbay, надо изучать предмет. $zab[$i] - доступ к элементу массива $zab с ключом $i
     
  13. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    да, неправильно написал. для начала надо было вот так:

    принимаем за данность, что оба массива считаются от 1 до 5.
     
  14. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Понял. Это просто определение элемента массива. А то, что сравнивать будут значение - это по умолчанию.
    Нет. Данностью статическое значение быть не может. Потому как игр будет, не 5 и не 25. А к примеру 34.
     
  15. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    это уже следующий этап изучения циклов и массивов:)
    индекс последнего элемента можно вычислить через count($array), но тогда в массиве не должно быть "пропусков"
     
  16. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Некоторые команды сыграли на одну игру меньше, то есть у них не может быть 5 матчей. Проблема была в том, что в последнем шаге условия, вместо:
    Код (Text):
    1. $ochki += 0;
    стоит
    Код (Text):
    1. $ochki = 0;
    --- Добавлено ---
    Загвоздка была в том, что во время условия, сравнивались не элементы массива, а сами массивы.
    runcore - первым кто обратил на это внимания.
    После этого стало понятно, что в принципе даже fjreach не обязательно было подключать, а можно обойтись стандартным for.
    --- Добавлено ---
    Вот как раз по поводу следующего этапа.
    На данный момент имеется турнирная таблица, содержание которой высчитывается с помощью 6 функций. Которые в свою очередь используют данные двух массивов (для каждой команды) - забитых и пропущенных голов. Функции считают, количество побед, ничей и поражений, забитых, пропущенных и разницы голов, а также очки.
    За пример взяты первые три клуба российской премьер лиги (Ростов, ЦСКА, Зенит).
    Вот общий, готовый код:
    Код (Text):
    1. <?php
    2. $RostovZ = array (1, 2, 0, 3, 1, 1, 1, 0, 1, 2, 0, 3, 2, 1, 2, 1, 1, 1, 1, 2, 0, 2, 0, 1);
    3. $RostovP = array (1, 1, 0, 0, 1, 2, 0, 1, 0, 1, 3, 2, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0);
    4. $CSKAZ = array (1, 2, 1, 2, 2, 2, 1, 2, 6, 1, 2, 3, 0, 2, 1, 0, 1, 0, 1, 0, 2, 0, 7, 1);
    5. $CSKAP = array (0, 0, 0, 0, 1, 1, 0, 2, 4, 1, 0, 2, 0, 0, 2, 2, 1, 2, 0, 2, 0, 2, 1, 1);
    6. $ZenitZ = array (2, 4, 3, 1, 0, 3, 1, 2, 1, 2, 3, 2, 5, 0, 0, 3, 1, 1, 0, 4, 2, 2, 2, 5);
    7. $ZenitP = array (1, 1, 0, 0, 2, 1, 3, 2, 1, 2, 0, 2, 1, 0, 2, 0, 4, 1, 0, 2, 0, 0, 0, 2);
    8.  
    9. function ochki ($zab, $prop) {
    10.     $ochki = 0;
    11.     foreach ($zab as $i => $v) {
    12.         $ochki += ($zab[$i] > $prop[$i] ? 3 : ($zab[$i] == $prop[$i] ? 1 : 0));
    13.     }
    14.     return $ochki;
    15. }
    16.  
    17. function vin ($zab, $prop) {
    18.     $vin = 0;
    19.     for ($i = 0; $i < count($zab); $i++) {
    20.         if ($zab[$i] > $prop[$i]) {
    21.             $vin += 1;
    22.         }
    23.     }
    24.     return $vin;
    25. }
    26.  
    27. function nich ($zab, $prop) {
    28.     $nich = 0;
    29.     for ($i = 0; $i < count($zab); $i++) {
    30.         if ($zab[$i] == $prop[$i]) {
    31.             $nich += 1;
    32.         }
    33.     }
    34.     return $nich;
    35. }
    36.  
    37. function por ($zab, $prop) {
    38.     $por = 0;
    39.     for ($i = 0; $i < count($prop); $i++) {
    40.         if ($zab[$i] < $prop[$i]) {
    41.             $por += 1;
    42.         }
    43.     }
    44.     return $por;
    45. }
    46.  
    47. function zpg ($a) {
    48.     $zpg = 0;
    49.     foreach ($a as $v) {
    50.         $zpg += $v;
    51.     }
    52.     return $zpg;
    53. }
    54.  
    55. function raznicaGolov ($a, $b) {
    56.     $raznicaGolov = $a - $b;
    57.     return $raznicaGolov;
    58. }
    59.  
    60. $ochkiRostov = ochki ($RostovZ, $RostovP);
    61. $ochkiCSKA = ochki ($CSKAZ, $CSKAP);
    62. $ochkiZenit = ochki ($ZenitZ, $ZenitP);
    63.  
    64. $vinRostov = vin ($RostovZ, $RostovP);
    65. $nichRostov = nich ($RostovZ, $RostovP);
    66. $porRostov = por ($RostovZ, $RostovP);
    67.  
    68. $vinCSKA = vin ($CSKAZ, $CSKAP);
    69. $nichCSKA = nich ($CSKAZ, $CSKAP);
    70. $porCSKA = por ($CSKAZ, $CSKAP);
    71.  
    72. $vinZenit = vin ($ZenitZ, $ZenitP);
    73. $nichZenit = nich ($ZenitZ, $ZenitP);
    74. $porZenit = por ($ZenitZ, $ZenitP);
    75.  
    76. $zgRostov = zpg ($RostovZ);
    77. $zgCSKA = zpg ($CSKAZ);
    78. $zgZenit = zpg ($ZenitZ);
    79.  
    80. $pgRostov = zpg ($RostovP);
    81. $pgCSKA = zpg ($CSKAP);
    82. $pgZenit = zpg ($ZenitP);
    83.  
    84. $raznicaGolovRostov = raznicaGolov ($zgRostov, $pgRostov);
    85. $raznicaGolovCSKA = raznicaGolov ($zgCSKA, $pgCSKA);
    86. $raznicaGolovZenit = raznicaGolov ($zgZenit, $pgZenit);
    87. ?>
    88.  
    89. <table border="1" cellpadding="3" cellspacing="0" style="text-align:center;">
    90.   <tr>
    91.     <td>Команда</td>
    92.     <td>Победы</td>
    93.     <td>Ничьи</td>
    94.     <td>Поражения</td>
    95.     <td>Забитые голы</td>
    96.     <td>Пропущенные голы</td>
    97.     <td>Разница голов</td>
    98.     <td>Очки</td>
    99.   </tr>
    100.   <tr>
    101.     <td>Ростов</td>
    102.     <td><?php echo $vinRostov; ?></td>
    103.     <td><?php echo $nichRostov; ?></td>
    104.     <td><?php echo $porRostov; ?></td>
    105.     <td><?php echo $zgRostov; ?></td>
    106.     <td><?php echo $pgRostov; ?></td>
    107.     <td><?php echo $raznicaGolovRostov; ?></td>
    108.     <td><?php echo $ochkiRostov; ?></td>
    109.   </tr>
    110.   <tr>
    111.     <td>ЦСКА</td>
    112.     <td><?php echo $vinCSKA; ?></td>
    113.     <td><?php echo $nichCSKA; ?></td>
    114.     <td><?php echo $porCSKA; ?></td>
    115.     <td><?php echo $zgCSKA; ?></td>
    116.     <td><?php echo $pgCSKA; ?></td>
    117.     <td><?php echo $raznicaGolovCSKA; ?></td>
    118.     <td><?php echo $ochkiCSKA; ?></td>
    119.   </tr>
    120.   <tr>
    121.     <td>Зенит</td>
    122.     <td><?php echo $vinZenit; ?></td>
    123.     <td><?php echo $nichZenit; ?></td>
    124.     <td><?php echo $porZenit; ?></td>  
    125.     <td><?php echo $zgZenit; ?></td>
    126.     <td><?php echo $pgZenit; ?></td>
    127.     <td><?php echo $raznicaGolovZenit; ?></td>
    128.     <td><?php echo $ochkiZenit; ?></td>
    129.   </tr>
    130. </table>
    И вот пришел момент следующего этапа. Как бы этот весь огромнейший код теперь уменьшить.Например использовать не все три строки (а в конечном итоге 15) таблицы (tr), а одну. Ведь значения должны подставляться через переменную. И как это реализовать еще не прозрел. Возможно путь в этом случае совсем иной.

    P.S. Возможно стоит создать новую тему?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    используй ассоциативные массивы
     
  18. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    функцию zpg () можно смело заменить на нативную array_sum()
    --- Добавлено ---
    для начала можно простить код
    PHP:
    1. function analiz($zab, $prop) {
    2.     $ochki = $vin = $nich=$por=0;
    3.     foreach ($zab as $i => $v) {
    4.         $ochki += ($zab[$i] > $prop[$i] ? 3 : ($zab[$i] == $prop[$i] ? 1 : 0));
    5.         if ($zab[$i] > $prop[$i]) {
    6.             $vin += 1;
    7.         } else if ($zab[$i] == $prop[$i]) {
    8.             $nich += 1;
    9.         } else if ($zab[$i] < $prop[$i]) {
    10.             $por += 1;
    11.         }
    12.     }
    13.     return array('ochki'=>$ochki,'vin'=>$vin,'nich'=>$nich,'por'=>$por);
    14. }
    15.  
    16. $analizRostov = analiz($RostovZ, $RostovP);
    17. $analizCSKA   = analiz($CSKAZ, $CSKAP);
    18. $analizZenit  = analiz($ZenitZ, $ZenitP);
    19.  
    20. $zgRostov = array_sum($RostovZ);
    21. $zgCSKA   = array_sum($CSKAZ);
    22. $zgZenit  = array_sum($ZenitZ);
    23.  
    24. $pgRostov = array_sum($RostovP);
    25. $pgCSKA   = array_sum($CSKAP);
    26. $pgZenit  = array_sum($ZenitP);
    27.  
    28. $raznicaGolovRostov= $zgRostov- $pgRostov;
    29. $raznicaGolovCSKA  = $zgCSKA  - $pgCSKA;
    30. $raznicaGolovZenit = $zgZenit - $pgZenit;
    а вообще нужно прийти к единому большому массиву, чтобы тупо в цикле перебирать результаты и строить любые таблицы автоматически
     
    Igorbay нравится это.
  19. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Спасибо runcore.
    Сколько полезной инфы, которой не знал.

    Про то что в одной функции можно вычислить сразу несколько операций не знал, хотя мысля посещала. Вот это наверное то, что нужно. Все в одной функции реализовать. Про array_sum, тоже теперь буду знать. Очень удобно.

    Но почему-то функция analiz - выводит лишь Array.

    То есть к ассоциативному? или имеется ввиду многомерность? И как подобное реализуется на практике, у профи? Получается создается один массив?
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ассоциативные - это где ключами идут слова, а не циферки. Прото удобно. Передаёшь сразу весь.
     
  21. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    пример:
    PHP:
    1. <?php
    2. $input = array(
    3.   'Ростов' => array(
    4.    'Z'=>array(1, 2, 0, 3, 1, 1, 1, 0, 1, 2, 0, 3, 2, 1, 2, 1, 1, 1, 1, 2, 0, 2, 0, 1)
    5.   ,'P'=>array(1, 1, 0, 0, 1, 2, 0, 1, 0, 1, 3, 2, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0)
    6.   ),
    7.   'ЦСКА'=>array(
    8.    'Z'=> array(1, 2, 1, 2, 2, 2, 1, 2, 6, 1, 2, 3, 0, 2, 1, 0, 1, 0, 1, 0, 2, 0, 7, 1)
    9.   ,'P'=> array(0, 0, 0, 0, 1, 1, 0, 2, 4, 1, 0, 2, 0, 0, 2, 2, 1, 2, 0, 2, 0, 2, 1, 1)
    10.   ),
    11.   'Зенит'=>array(
    12.    'Z'=> array(2, 4, 3, 1, 0, 3, 1, 2, 1, 2, 3, 2, 5, 0, 0, 3, 1, 1, 0, 4, 2, 2, 2, 5)
    13.   ,'P'=> array(1, 1, 0, 0, 2, 1, 3, 2, 1, 2, 0, 2, 1, 0, 2, 0, 4, 1, 0, 2, 0, 0, 0, 2)
    14.   )
    15. );
    16. function analiz($zab, $prop) {
    17.     $ochki=$vin=$nich=$por=0;
    18.     foreach ($zab as $i => $v) {
    19.         $ochki+= ($zab[$i]>$prop[$i] ? 3 : ($zab[$i]==$prop[$i] ? 1 : 0));
    20.         $vin  += $zab[$i]> $prop[$i] ? 1:0;
    21.         $nich += $zab[$i]==$prop[$i] ? 1:0;
    22.         $por  += $zab[$i]< $prop[$i] ? 1:0;
    23.     }//foreach
    24.     return array('ochki'=>$ochki,'vin'=>$vin,'nich'=>$nich,'por'=>$por);
    25. }
    26. ?>
    27. <table border="1" cellpadding="3" cellspacing="0" style="text-align:center;">
    28.   <tr>
    29.     <td>Команда</td>
    30.     <td>Победы</td>
    31.     <td>Ничьи</td>
    32.     <td>Поражения</td>
    33.     <td>Забитые голы</td>
    34.     <td>Пропущенные голы</td>
    35.     <td>Разница голов</td>
    36.     <td>Очки</td>
    37.   </tr>
    38. <?php
    39. foreach($input as $k=>$v) {
    40.     $analiz = analiz( $v['Z'], $v['P'] );
    41.     $zg= array_sum($v['Z']);
    42.     $pg= array_sum($v['P']);
    43.     echo '<tr>
    44.    <td>'.$v['name'].'</td>
    45.    <td>'.$analiz['vin'].'</td>
    46.    <td>'.$analiz['nich'].'</td>
    47.    <td>'.$analiz['por'].'</td>
    48.    <td>'.$zg.'</td>
    49.    <td>'.$pg.'</td>
    50.    <td>'.($zg-$pg).'</td>
    51.    <td>'.$analiz['ochki'].'</td>
    52.  </tr>';
    53. }//foreach
    54. ?>
    55. </table>
     
    Igorbay нравится это.
  22. Igorby

    Igorby Новичок

    С нами с:
    30 сен 2015
    Сообщения:
    34
    Симпатии:
    0
    Спасибо большое. Все понятно и доступно. Теперь буду ставить себе новые задачи. В которых значения буду браться из базы данных.
    Спасибо тезка. Про ассоциативный массив я знаю. Но целью было освоение числового массива, познание его возможностей
    А что используют в данном случае профи? Популярные, спортивные сайты например Ассоциативный массив?
     
  23. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Они используют базу данных и SQL. При обработке результатов запроса, скорее всего, ассоциативные массивы. Они гораздо удобнее. Если использовать числовые, то при вставке нового столбца в таблицу где-нибудь в середину, придётся править и пхп-код.
     
    Igorbay нравится это.
  24. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    То, что все идет из базы это понятно. Важно как они генеряться в коде? Через массив? Через ассоциативный или числовой?
    По вашему посту понял, что через ассоциативный. Спасибо.
     
  25. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Там может быть и объект. Одну и ту же задачу можно решить кучей разных способов. Правильных нет. Есть не правильные :)

    Стремиться нужно к тому, чтобы полученные из базы данные не требовали никакой обработки. Вы сделали SQL-запрос, получили результат и сразу отправили на вывод. Ничего больше не высчитывая. Ну, можно немного причесать для эстетики.