За последние 24 часа нас посетили 49938 программистов и 1730 роботов. Сейчас ищут 664 программиста ...

медленный цикл

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

  1. Alex_1984

    Alex_1984 Новичок

    С нами с:
    10 дек 2014
    Сообщения:
    133
    Симпатии:
    0
    Есть цикл

    Код (PHP):
    1. foreach ($employees as $employee)
    2.         {
    3.             for($i = 1; $i <= $this->ts_days_count; $i++)
    4.             {
    5.                 foreach ($timesheet as $ts)
    6.                 {
    7.                     if((int)$i < 10)
    8.                     {
    9.                         $i = '0'.(int)$i;
    10.                     }
    11.  
    12.                     $date->setDateFromStr($ts->getProperty('workdate'));
    13.                     $date1->setDate($date->getYear(), $date->getMonth(), $i);
    14.  
    15.                     if($date->getDateStr() === $date1->getDateStr() && $employee->getProperty('id') == $ts->getProperty('employeeid') && $ts->getProperty('hourscount') != '0')
    16.                     {
    17.                         echo  $ts->getProperty('hourscount');
    18.                         $days_count += 1;
    19.                         if($i < 16)
    20.                         {
    21.                             $first_h_count += (int)$ts->getProperty('hourscount');
    22.                         }
    23.                         else 
    24.                         {
    25.                             $second_h_count += (int)$ts->getProperty('hourscount');
    26.                         }
    27.                     }
    28.  
    29.                 }
    30.                 
    31.                 If($i == 15)
    32.                 {
    33.                     echo $first_h_count;
    34.                 }
    35.   
    36.                 If($i == $this->ts_days_count)
    37.                 {
    38.                    echo $second_h_count;
    39.                 } 
    40.             }
    41.  
    42.         }
    это сокращенный вариант, вообще он пдф формирует, а проблема вот в чем, каждая итерация цикла foreach ($employees as $employee) занимает намного больше времени чем предыдущая, значения $this->ts_days_count и $timesheet определены вне цикла, и в цикле их значение не меняется.

    вот время выполнения:
    1 -> 0,7
    2 -> 1,4
    3 -> 2,3
    4 -> 3,5
    5 ->4,4
    6 -> 20,4

    подскажите в чем причина может быть?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в глаза ничего не бросается
     
  3. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Локализуйте проблему. Разбейте цикл на блоки. Засекайте время работы каждого блока, а не всей итерации. Ищите уязвимое место.
     
  4. Alex_1984

    Alex_1984 Новичок

    С нами с:
    10 дек 2014
    Сообщения:
    133
    Симпатии:
    0
    в общем tcpdf мне все тормозит, если без формирования пдф цикл прогоняю каждая итерация с одинаковым временем выполняется 0,06.