在PHP中对包含日期和时间的文本字段进行双爆炸


Double explode a text field containing date and time in PHP

我有一个冗长的文本字段,其中包含多个以逗号分隔的日期和时间。下面是示例

2013-08-26 10:00:00,2013-08-26 15:00:00,2013-08-26 20:00:00
2013-08-27 01:00:00,2013-08-27 06:00:00,2013-08-27 11:00:00
2013-08-27 16:00:00,2013-08-27 21:00:00,2013-08-28 02:00:00
2013-08-28 07:00:00,2013-08-28 12:00:00,2013-08-28 17:00:00
在上面的例子中,我需要下面的结构

步骤1:将逗号分隔的值拆分为一个数组。步骤2:从上面得到的数组中,将所有的2013-08-26日期推入一个数组,将2013-08-27日期推入另一个数组,然后将2013-08-28日期推入另一个数组。

我成功地将主文本分解为一个数组,但没有成功地获得一个特定日期的值列表。

foreach (explode(PHP_EOL, $dates) as $line)
{
    foreach (explode(',', $line) as $dt)
    {
        $dateVal = date('Y-m-d', strtotime($dt));
        switch ($dateVal)
        {
            case '2013-08-26':
                $arr1[] = $dt;
                break;
            case '2013-08-27':
                $arr2[] = $dt;
                break;
            case '2013-08-28':
                $arr3[] = $dt;
                break;
        }
    }
}
<<p> 在线演示/strong>
$dates = "2013-08-26 10:00:00,2013-08-26 15:00:00,2013-08-26 20:00:00
2013-08-27 01:00:00,2013-08-27 06:00:00,2013-08-27 11:00:00
2013-08-27 16:00:00,2013-08-27 21:00:00,2013-08-28 02:00:00
2013-08-28 07:00:00,2013-08-28 12:00:00,2013-08-28 17:00:00";
$dates = explode("'n", $dates);
foreach($dates as $date) {
   $date = explode(",", $date);
   var_dump($date); 
   // i.e. with $date[1] I will get the middle date of particular line.
}
foreach中的

$date,正如您所看到的,变成了一个数组(在展开后),其中包含一行中以逗号分隔的所有日期。

距离我上次使用PHP已经有一段时间了,但这是我生锈的解决方案:

$map = array();
$records = explode(',', $input);
foreach( $records as $record )
{
    $a = explode(" ", $record);
    if(!array_key_exists( $a[0], $map ))
        $map[$a[0]] = array();
    $map[$a[0]][] = $a[1];
}
var_dump($map);

我还没有测试过,对不起。但它可能会起作用…

它应该给你类似的东西:

array(2)
(
    ['2014-03-14'] => array(2)
    (
        [0] => '04:03:24'
        [1] => '04:03:25'
    ) 
    ['2014-03-14'] => array(2)
    (
        [0] => '04:03:24'
        [1] => '04:03:25'
    ) 
)