Создавать блоки времени из многомерного массива - PullRequest
2 голосов
/ 03 июня 2011

Я работаю над системой планирования, и мне нужно захватить все последовательные времена 4 или более, которые я выполнил:

Array
(
    [0] => Array
        (
            [0] => 18:00:00
            [1] => 19:00:00
            [2] => 20:00:00
            [3] => 21:00:00
            [4] => 22:00:00
        )

    [1] => Array
        (
            [0] => 09:00:00
            [1] => 10:00:00
            [2] => 11:00:00
            [3] => 12:00:00
            [4] => 13:00:00
            [5] => 14:00:00
            [6] => 15:00:00
            [7] => 16:00:00
        )

)

Как мне взять этот многомерный массив и поместить их в потенциальные блоки временииз четырех как флажки?

Например:

Флажок 1 = 18:00:00 - 21: 00: 00

Флажок 2 = 19:00:00 -22: 00: 00

Флажок 3 = 09:00:00 - 12: 00: 00

Флажок 4 = 10:00:00 - 13: 00: 00

и так далее ...

Любая помощь будет принята с благодарностью, так как она часами ломает мне голову.

Заранее благодарен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 03 июня 2011

Что ж, я вижу, что вы хотите собрать подмассивы в один большой массив, а затем разделить их на четыре части, из которых вы хотите выбрать минимальное и максимальное значение для отображения на вашей веб-странице ? Я бы сделал это следующим образом:

  1. Получить все значения подмассива и поместить их в один большой массив
  2. Сортировка большого массива
  3. Разделить большой массив на четыре сегмента
  4. Перебрать разбитый массив и извлечь минимальное и максимальное значения
  5. Отобразите их на своей странице.

Вот как может выглядеть код:

// Setting: Amount of checkboxes
$div = 4;

$a = array(
    array("18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00"),
    array("09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00")
);

$a_tot = array_unique(array_merge($a[0], $a[1]));
$count = count($a_tot);
$num_per = ceil($count / $div);

sort($a_tot);
$a_new = array();
$i = 0;
while (!empty($a_tot[$i])) {

    $a_new[] = array_slice($a_tot, $i, $num_per);
    $i += $num_per;

}

$chk_opt = array();
for ($i=0; $i<$div; $i++) {

    $chk_opt[] = sprintf("%s - %s", min($a_new[$i]), max($a_new[$i]));

}

unset ($a_tot, $count, $num_per, $a_new);

Выход:

array(4) {
    [0]=> string(19) "09:00:00 - 12:00:00"
    [1]=> string(19) "13:00:00 - 16:00:00"
    [2]=> string(19) "18:00:00 - 21:00:00"
    [3]=> string(19) "22:00:00 - 22:00:00"
}
0 голосов
/ 03 июня 2011

Попробуйте это:

$a = array(
    array("18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00"),
    array("09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00")
);
foreach ($a as $group)
{
    for ($i = 3; $i < count($group); ++$i)
    {
        print $group[$i-3] . " - " . $group[$i] . "<br />"; 
    }
}

Вывод:

18:00:00 - 21:00:00
19:00:00 - 22:00:00
09:00:00 - 12:00:00
10:00:00 - 13:00:00
11:00:00 - 14:00:00
12:00:00 - 15:00:00
13:00:00 - 16:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...