Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中双重分解包含日期和时间的文本字段_Php - Fatal编程技术网

在PHP中双重分解包含日期和时间的文本字段

在PHP中双重分解包含日期和时间的文本字段,php,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:

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

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

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

$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.
}
$date
在foreach内部,正如您所看到的,它变成了一个数组(分解后),包含所有日期,并在一行中用逗号分隔

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;
        }
    }
}

我上次使用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'
    ) 
)