Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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;
}
Кто такая труя?