【问题标题】:extract tags (words) from whole string从整个字符串中提取标签(单词)
【发布时间】:2025-12-25 00:45:06
【问题描述】:

从字符串中提取每个单词的最佳方法是什么,例如:

one, two, "big three", four, "seven and eight"

用双引号括起来的应该被视为单个元素:

array("one", "two", "big three", "four", "seven and eight")

【问题讨论】:

    标签: php string


    【解决方案1】:

    您应该使用 CSV 解析器,而不是自己滚动。 PHP 有一个内置函数,可以完全满足您的需求 — str_getcsv:

    $tags = str_getcsv($string);
    foreach($tags as $tag) {
        ...
    }
    

    请注意,这需要 PHP 5.3。 “用户贡献的注释”显示了许多解决方法。

    【讨论】:

      【解决方案2】:

      如果您使用的是 php >= 5.3,那么您有函数 str_getcsv。

      $tags = str_getcsv($tags, ',', '"', '\\');
      $tags = array_map('trim', $tags);
      

      【讨论】:

        【解决方案3】:

        你可以使用:

        $tags = explode(',', $string);
        foreach($tags as &$tag)
        {
            $tag = trim($tag);
        }
        

        (未检查代码)

        【讨论】:

        • 这不会处理某些输入权限,例如:... 二、“大、三”、四、...
        • 为什么是 &$tag?这是不鼓励的,因为 php5
        • @Ron:真的吗?为什么?你现在应该如何迭代和修改?
        • 这被认为是糟糕的编程风格。由于事实,这种语法导致混乱。替代方法: foreach($array as $key => $value) { $array[$key] = $value; }