将数组与不同的循环放在一起

时间:2011-09-01 12:19:59

标签: php arrays

标题可能有点模糊,但我不知道如何称呼这个问题。

我的表单中有复选框。检查后,他们的值会发布到我的数据库中。然而,当他们没有得到检查时,我无法跟踪未经检查的一次,因为嗯,这就是它的工作方式,对吧?

例如,对于2011年8月21日至2011年8月25日期间的活动,当客人选择他只需要21日和23日的门票时,我会收到以下数组(门票不是只有在最终结果中才会出现的值,仅为了简洁起见:

Array
(
[2011-08-21] => Array
    (
        [ticket] => 1
    )

[2011-08-23] => Array
    (
        [ticket] => 1
    )

)

但是,我也想跟踪他不需要票的其他日子。所以,我需要一个像这样的数组:

Array
(
    [2011-08-21] => Array
        (
            [ticket] => 1
        )
    [2011-08-23] => Array
        (
            [ticket] => 0
        )
    [2011-08-23] => Array
        (
            [ticket] => 1
        )
    [2011-08-23] => Array
        (
            [ticket] => 0
        )

    [2011-08-23] => Array
        (
            [ticket] => 0
        )
)

这样我可以跟踪我的数据库中的所有内容(这是该项目所需的)。

我只是不太确定如何将第一个数组转换为第二个数组。我一直在尝试for和foreach循环,将它与我的event_details数组相结合,如下所示:

Array
(
    [eventID] => 1
    [groupID] => 3
    [name] => Moto GP 1
    [startDate] => 2011-08-21
    [endDate] => 2011-08-25
    [number_of_days] => 5
    [startDate_f] => 21/08/11
    [endDate_f] => 25/08/11
)

使用该数组中的数据,我可以计算所有的事件日,但我不太确定如何完成它。有帮助吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

未经测试,但类似:

$selected_days = /* Wherever you get the posted array data from */;

$start = new DateTime($event_details['startDate']);
$end   = new DateTime($event_details['endDate']);

while ($start <= $end) {
    $key = $start->format('Y-m-d');

    if (!array_key_exists($key, $selected_days))
        $selected_days[$key] = array( 'ticket' => 0 );

    $start->modify('+1 day');
}