【问题标题】:PHP Explode comma separated values with datePHP用日期分解逗号分隔值
【发布时间】:2013-05-02 13:46:47
【问题描述】:

我正在使用explode 将一串逗号分隔值解析为变量。那里没问题。我遇到的问题是其中一个值是格式中的日期:2013 年 5 月 3 日。所以爆炸是在日期中的逗号上出现的。我有什么办法可以解决这个问题吗?我对源(原始字符串)没有太多控制权,所以我试图想出一种方法来处理我所拥有的。

$CONTENT = 'blue,red,purple,May 2, 2013,orange,green';
list($valueA, $valueB, $valueC, $valueD, $valueE, $valueF) = explode(',', $CONTENT);

谢谢!

【问题讨论】:

  • $CONTENT 变量是否正确?我想你的意思是$CONTENT="blue,red,purple...",对吧?
  • @MatthiasLaug 是的,很抱歉。已更正!
  • 原创内容总是这样形成的吗?
  • 首先修复生成字符串的任何内容。这比尝试修复损坏的输出效果更好。

标签: php explode


【解决方案1】:

您可以使用正则表达式来拆分您的字符串。这是基于这样的假设,即如果将两个单词用作分隔符,则两个单词之间没有空格。

$CONTENT = 'blue,red,purple,May 2, 2013,orange,green';
$result = preg_split('/,(?! )/', $CONTENT);

您的字符串将正确生成

array(6) {
   [0]=>
      string(4) "blue"
   [1]=>
      string(3) "red"
   [2]=>
      string(6) "purple"
   [3]=>
      string(11) "May 2, 2013"
   [4]=>
      string(6) "orange"
   [5]=>
     string(5) "green"
}

所以一旦你再次使用你的列表表达式,你的变量应该被正确设置

list($valueA, $valueB, $valueC, $valueD, $valueE, $valueF) = preg_split('/,(?! )/', $CONTENT);

【讨论】:

    【解决方案2】:

    通过在数组中查找值并将逗号替换为特殊符号来转义逗号,然后在分解后用逗号替换特殊符号。

    【讨论】:

    • 你如何区分日期中的逗号和分隔两个列表项的逗号?
    • 哦,我没有正确阅读您的问题。也许使用正则表达式来尝试找到任何有效的日期(月日年),然后将它们取出、分解、放回?
    【解决方案3】:

    我唯一能想到的就是使用正则表达式来查找与日期模式匹配的内容,将逗号替换为其他内容,然后在分解字符串后,再次用逗号替换该特殊字符。

    这很乱,但如果你真的无法控制传入的字符串,你可能无能为力。

    【讨论】:

    • 这是匹配日期的正则表达式:\w{3,10}\s\d{1,2},\s\d{4}
    • 假设它保持这种格式,虽然 - 它可能,但谁知道呢,真的。但是,是的,这适用于给定的示例,感谢您将其包含在内。
    • 没问题。不幸的是,在回答有限的数据子集时,我们都必须做出很多假设:-)
    • 谢谢大家。非常感谢您的帮助。我要回去看看内容字符串是否可以采用不同的格式,以便有一定程度的可预测性。似乎这是唯一可靠的方法。
    • 如果你能得到它,看看你能不能让他们把它作为 csv 发送,用引号引起来。 "value one","red","May 1, 2013" 之类的东西可以解析 CSV,即使你自己做,也应该更容易一些。
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多