這個問題可以在兩個部分被分解:
- 對於任何兩個日期,創建具有所有落入日期間隔內的天的陣列。
- 創建所有可能天數的所有可能組合(從1到n,其中n ==間隔內的天數)。
對於第一部分,我將使用DatePeriod PHP類,併爲第二個Math_Combinatorics PEAR包。下面是完整的代碼:
require_once 'Math/Combinatorics.php';
date_default_timezone_set('UTC');
$format = "d/m/Y";
$start = DateTime::createFromFormat($format, "20/10/2014");
$end = DateTime::createFromFormat($format, "23/10/2014");
$period = new DatePeriod($start, new DateInterval('P1D'), $end);
$dates = array();
foreach ($period as $date) {
$dates[] = $date->format($format);
}
$dates[] = $end->format($format);
$combinations = array();
$combinatorics = new Math_Combinatorics();
foreach (range(1, count($dates)) as $number_of_combinations) {
foreach ($combinatorics->combinations($dates, $number_of_combinations) as $combination) {
$combinations[] = $combination;
}
}
print_r($combinations);
結果:
Array
(
[0] => Array
(
[0] => 20/10/2014
)
[1] => Array
(
[0] => 21/10/2014
)
[2] => Array
(
[0] => 22/10/2014
)
[3] => Array
(
[0] => 23/10/2014
)
[4] => Array
(
[0] => 20/10/2014
[1] => 21/10/2014
)
[5] => Array
(
[0] => 20/10/2014
[2] => 22/10/2014
)
[6] => Array
(
[0] => 20/10/2014
[3] => 23/10/2014
)
[7] => Array
(
[1] => 21/10/2014
[2] => 22/10/2014
)
[8] => Array
(
[1] => 21/10/2014
[3] => 23/10/2014
)
[9] => Array
(
[2] => 22/10/2014
[3] => 23/10/2014
)
[10] => Array
(
[0] => 20/10/2014
[1] => 21/10/2014
[2] => 22/10/2014
)
[11] => Array
(
[0] => 20/10/2014
[1] => 21/10/2014
[3] => 23/10/2014
)
[12] => Array
(
[0] => 20/10/2014
[2] => 22/10/2014
[3] => 23/10/2014
)
[13] => Array
(
[1] => 21/10/2014
[2] => 22/10/2014
[3] => 23/10/2014
)
[14] => Array
(
[0] => 20/10/2014
[1] => 21/10/2014
[2] => 22/10/2014
[3] => 23/10/2014
)
)
你應該使用不同的列'開始date'和'結束date'在表 – Manwal 2014-09-22 09:16:55
讓我們瞭解您已經做了 – niyou 2014-09-22 09:28:52
怎麼了用簡單的複選框:第1天,第2天等?單日參與情況如何?或者例如20/10/2014和23/10/2014(跳過一兩天)? – 2014-09-22 11:12:44