Проверка временных интервалов php

M3
На сайте с 24.11.2013
Offline
8
714

Всем приветы, никак не получается решить задачку, есть массив

Array

(
[3512] => Array
(
[10:00] => 1
[10:30] => 1
[11:00] => 0
[11:30] => 0
[12:00] => 1
[12:30] => 1
[13:00] => 0
[13:30] => 0
[14:00] => 0
[14:30] => 0
[15:00] => 1
[15:30] => 1
)

)

Значения ключей.

1) Занято - 0

2) Свободно - 1

3) В данных условиях не возможно - 2

Пример :

Услуга - 60 минут,

10:00 + 60 = 11:00 Допустимая комбинация следовательно Значение 1;

10:30 + 60 = 11:30 Не допустимая комбинация но, если бы услуга была 30 минут то запись имела место быть, значит Значение 2;

Сам сделал так:

foreach($arrayTime as $key=>$val){

foreach($val as $k=> $v){
$new_time = timeAddMin($k,30); // Складывает текущую метку с длительностью услуги( если $k = 9:00 а время услуги 30 то $new_time = 9:30
$res = whereToSignUp($arrayTime,$k,$new_time);

if($res == true){
echo '<p>'.$k.'Можно</p>';
}else{
echo '<p style="color:red;">'.$k.'</p>';
}
}
}

function whereToSignUp($arrayTime,$sTimestamp,$eTimestamp){

$znak = '';
foreach($arrayTime as $key=>$val){
foreach($val as $k=>$v){
if($k >= $sTimestamp AND $k <= $eTimestamp){

$znak .= $v;

}
}
}
if(strpbrk($znak,'0')){
return false;
}else{
return true;
}
}

Как бы он частично решает задачу но последние элементы обрабатывает не корректно да и

чувствую написал не скрипт а велосипед марки конек-горбунек :) Пожалуйста укажите на ошибки, и на возможные варианты решения.

MI
На сайте с 16.07.2008
Offline
74
#1

Опиши конкретно задачу, а то непонятно

Mad_Man
На сайте с 10.11.2008
Offline
162
#2


# исходные данные

$require = 60; # 60 min

$array = array
(
'10:00' => 1,
'10:30' => 1,
'11:00' => 0,
'11:30' => 0,
'12:00' => 1,
'12:30' => 1,
'13:00' => 0,
'13:30' => 0,
'14:00' => 0,
'14:30' => 0,
'15:00' => 1,
'15:30' => 1
);

$result = search_available($array, $require);


# логика

function search_available($array, $require)
{
$result = null;

$total = ceil($require / 30);

$array_keys = array_keys($array);
$array_vals = array_values($array);
$array_size = count($array_keys);

for ($i = 0; $i < $array_size; $i++)
{
$parts = 0;

for ($j = $i; $j < $array_size; $j++)
{
if ($array_vals[$j])
{
$parts++; continue;
}

break;
}

if (!$parts) { $result[] = array($array_keys[$i] => 0); }
else if ($parts >= $total) { $result[] = array($array_keys[$i] => 1); }
else { $result[] = array($array_keys[$i] => 2); }
}

return $result;
}


# результат

Array
(
[0] => Array [10:00] => 1
[1] => Array [10:30] => 2
[2] => Array [11:00] => 0
[3] => Array [11:30] => 0
[4] => Array [12:00] => 1
[5] => Array [12:30] => 2
[6] => Array [13:00] => 0
[7] => Array [13:30] => 0
[8] => Array [14:00] => 0
[9] => Array [14:30] => 0
[10] => Array [15:00] => 1
[11] => Array [15:30] => 2
)
M3
На сайте с 24.11.2013
Offline
8
#3

Огромнейшее спасибо, это именно то что нужно :)) ( доволен как слон :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий