【问题标题】:Simple question, comma delimited id's to array in php 5.2简单的问题,逗号分隔的 id 到 php 5.2 中的数组
【发布时间】:2009-12-07 03:18:58
【问题描述】:

我收到了一个逗号分隔的 id 字符串,我需要一些快速的方法将它们拆分成一个数组。 我知道我可以对其进行硬编码,但这太粗俗且毫无意义。

我对正则表达式一无所知,我在互联网上的任何地方都找不到简单的例子,只有大量的教程试图教我如何在 2 小时内掌握正则表达式。

fgetcsv 仅适用于文件,而 str_getcsv 仅适用于 PHP 5.3 及更高版本。

那么,我将不得不手写这个还是有什么可以为我做的? 我更喜欢简单的正则表达式解决方案,并稍微解释一下它为什么会这样做。

【问题讨论】:

  • 是否总是没有空格 (1,2,3,4) 或者是否可以包含空格 (1, 2, 3)?
  • 根本不会出现空格

标签: php regex csv


【解决方案1】:
$string = "1,3,5,9,11";
$array = explode(',', $string);

explode()

返回一个字符串数组,每个字符串都是在字符串分隔符形成的边界上拆分字符串形成的子字符串。

【讨论】:

    【解决方案2】:

    正常的分割功能有问题吗?

    $array = split(',', 'One,Two,Three');
    

    会给你

    Array
    (
      [0] => One
      [1] => Two
      [2] => Three
    )
    

    【讨论】:

    • 是的。 “从 PHP 5.3.0 开始,该功能已被弃用,从 PHP 6.0.0 开始已被删除。强烈建议不要依赖此功能。”根据 PHP 文档。
    • 我明白了,但他的 php 是
    • 此外,它使用正则表达式而不是直接字符串。 explode 使用直字符串,速度更快,开销更少。不幸的是,由于它的命名方式,它似乎是正确的功能。
    【解决方案3】:

    如果你只想用逗号分开:

    $values = explode(",", $string);
    

    如果您还想去掉逗号周围的空格(例如:您的字符串是1, 3, 5

    $values = preg_split('/\s*,\s*/', $string)
    

    如果您希望在用引号引起来的字符串中包含逗号,(例如:first, "se,cond", third

    $regex = <<<ENDOFREGEX
                /  "  ( (?:[^"\\\\]++|\\\\.)*+ ) \"
                 | '  ( (?:[^'\\\\]++|\\\\.)*+ ) \'
                 | ,+
                /x
    ENDOFREGEX;
    $values = preg_split($regex, $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    

    【讨论】:

    • 为什么投反对票?我不是repwhoring,但这有什么问题?
    【解决方案4】:

    一个简单的正则表达式应该可以解决问题。

    $a_ids = preg_split('%,%', $ids);
    

    【讨论】:

    • 看到另一种方法很有趣,但在这种情况下,正则表达式是多余的。
    • 很公平,尽管它是一个 6 的一个,半打的其他情况。两者之间的性能差异可以忽略不计。
    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多