【问题标题】:Converting string of datetime to array with preg_match [closed]使用 preg_match 将日期时间字符串转换为数组 [关闭]
【发布时间】:2013-10-25 07:44:23
【问题描述】:

我有这个日期和时间字符串

2013-10-21 09:49:51 2013-10-22 10:23:06 2013-10-22 10:23:20 2013-10-22 10:33:34 2013-10-22 10: 33:40 2013-10-23 15:14:04 2013-10-23 15:14:09 2013-10-23 15:15:04 2013-10-23 15:26:18 2013-10-23 15: 27:26 2013-10-23 15:27:29 2013-10-23 15:37:16 2013-10-23 15:45:08 2013-10-23 15:47:19 2013-10-23 16: 05:37 2013-10-23 16:23:28 2013-10-23 16:31:09 2013-10-23 16:32:08 2013-10-23 16:32:54 2013-10-23 17: 2013-10-23 11:28 2013-10-23 17:12:24 2013-10-23 17:12:33

我需要一些帮助来使用preg_match 将字符串处理成数组。

预期输出数组示例:

datetimeArr=array(0=>'2013-10-21 09:49:51',1=>'2013-10-22 10:23:06',2=>'2013-10-23 15:45:08')

【问题讨论】:

    标签: php regex arrays date time


    【解决方案1】:

    如果你必须使用正则表达式:

    .{10}\s.{8}
    

    【讨论】:

    【解决方案2】:

    享受 RegEx 的乐趣。我只是在 2013 的位置爆炸字符串。然后你可以很容易地将它添加到数组中。

    【讨论】:

      【解决方案3】:
      $input = '2013-10-21 09:49:51 2013-10-22 10:23:06 2013-10-22 10:23:20 2013-10-22 10:33:34 2013-10-22 10:33:40 2013-10-23 15:14:04 2013-10-23 15:14:09 2013-10-23 15:15:04 2013-10-23 15:26:18 2013-10-23 15:27:26 2013-10-23 15:27:29 2013-10-23 15:37:16 2013-10-23 15:45:08 2013-10-23 15:47:19 2013-10-23 16:05:37 2013-10-23 16:23:28 2013-10-23 16:31:09 2013-10-23 16:32:08 2013-10-23 16:32:54 2013-10-23 17:11:28 2013-10-23 17:12:24 2013-10-23 17:12:33 2013-10-23';
      
      preg_match_all('/\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}/', $input, $output_array);
      var_dump($output_array);
      

      【讨论】:

        【解决方案4】:

        如果你真的需要使用正则表达式,最简单的方法是:

        preg_match_all('/(.{19})\s?/', $input, $result);
        $result = $result[1];
        

        否则最好使用这种单行解决方案,因为正则表达式对于此任务来说是一种过度杀伤:

        $result = array_map('trim', str_split($input, 20));
        

        【讨论】:

          【解决方案5】:

          这里不需要使用正则表达式,只需使用str_split,因为您的块是固定长度的:

          $dtStrings = "2013-10-21 09:49:51 2013-10-22 10:23:06 2013-10-22 10:23:20 2013-10-22 10:33:34 2013-10-22 10:33:40 2013-10-23 15:14:04 2013-10-23 15:14:09 2013-10-23 15:15:04 2013-10-23 15:26:18 2013-10-23 15:27:26 2013-10-23 15:27:29 2013-10-23 15:37:16 2013-10-23 15:45:08 2013-10-23 15:47:19 2013-10-23 16:05:37 2013-10-23 16:23:28 2013-10-23 16:31:09 2013-10-23 16:32:08 2013-10-23 16:32:54 2013-10-23 17:11:28 2013-10-23 17:12:24 2013-10-23 17:12:33 2013-10-23";
          
          $dtArray = str_split($dtStrings, 20);
          

          当然,您将在每个元素中都有一个尾随空格字符(可能最后一个除外)。要删除它,只需遍历在元素上运行 rtrim 的数组即可。

          $dtArray = array_map('trim', str_split($dtStrings, 20));
          

          【讨论】:

          • 请避免通过引用循环遍历数组。悬空引用只是等待发生的意外。 More details here
          • @EliasVanOotegem 非常有趣!感谢您指点我学习新东西:)
          猜你喜欢
          • 1970-01-01
          • 2013-06-28
          • 2016-02-18
          • 2014-01-02
          • 2022-08-18
          • 2019-05-15
          • 2021-03-21
          • 2013-02-13
          • 2020-05-24
          相关资源
          最近更新 更多