- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
function build_period($crews){
global $start_time, $end_time, $memc;
cache_smens();
//Добавление смен и исключений
foreach ($crews as $k => $v){
$re1 = @$memc->get($v['ID']);
if (is_array($re1)){
foreach ($re1 as $v1){
$crews[$k]['sm'][] = $v1;
}
}
$re2 = get_exception($v);
foreach ($re2 as $v2){
$crews[$k]['sm'][] = $v2;
}
}
$flags = array();
foreach ($crews as $v){//Если есть смена
if (isset($v['sm'])){
$flags[$v['ID']] = array();
//Генерируем флаги
//Есть смена - false, иначе если эту минуту надо замерять - true
for ($i = $start_time; $i <= $end_time; $i = $i + (60)){
if (!isset($flags[$v['ID']][$i])){
$flags[$v['ID']][$i] = true;
}
foreach ($v['sm'] as $v1){
if ($i >= $v1['begin'] && $i <= $v1['end']){
$flags[$v['ID']][$i] = false;
}
}
}
}
else{
//Если смены нет забъем массив труями.
for ($i = $start_time; $i <= $end_time; $i = $i + (60)){
if (!isset($flags[$v['ID']][$i])){
$flags[$v['ID']][$i] = true;
}
}
}
}
$xor_per = array();
foreach ($flags as $k => $v){
$l1 = 0;
$l2 = 0;
foreach ($flags[$k] as $k1 => $v1){
/**
* На основе флагов генерируем ключи старта - конца замера.
*
* Если не установлен предыдущий флаг или предыдущий флаг - смена
* и текущий флаг - True, смены нет, ставим отметку начала периода
*/
if ((!isset($flags[$k][$k1 - 60]) || !$flags[$k][$k1 - 60]) && $v1){
$xor_per[$k][$l1]['begin'] = $k1;
$l1++;
}
/**
* Если следующий флаг false или неустановлен и текущий true
* ставим отметку конца смены.
*/
if ((!isset($flags[$k][$k1 + 60]) || !$flags[$k][$k1 + 60]) && $v1){
/**
* Если время в итерации равно времени конца суток
* укажем концом периода замера конец суток
* иначе нахерато добавим минуту
*/
$xor_per[$k][$l2]['end'] = $k1 == $end_time ? $end_time : $k1 + 60;
$l2++;
}
}
#need вкурить что я тут написал
if (isset($xor_per[$k])){
$crews[$k]['ps'] = $xor_per[$k];
}else{
//Если целые сутки смена
unset($crews[$k]);
}
unset($flags[$k]);
}
return $crews;
}
Stallman 12.02.2015 18:44 # +1
Кто такая труя?
kegdan 12.02.2015 18:47 # +1
Fike 12.02.2015 22:30 # 0
guest 13.02.2015 00:09 # +2
kegdan 13.02.2015 01:24 # +3