【问题标题】:PHP explode functionPHP 爆炸函数
【发布时间】:2009-12-19 09:56:54
【问题描述】:

我想让用户输入标签:

windows linux "mac os x"

然后用空格将它们分开,但也将“mac os x”识别为一个完整的单词。

是否可以将explode功能与其他功能结合使用?

必须有办法。

【问题讨论】:

  • 告诉用户使用 mac-os-x :)
  • 我会创建一个标签字典文件并使用 levenshtein 函数找到最佳匹配。

标签: php arrays string explode


【解决方案1】:

我会要求用户输入逗号分隔的标签并用逗号分隔符展开:

$string = "windows, linux, mac os x";
$pieces = explode(',', $string);

这是大多数标签系统的工作方式。

否则你需要构造一个解析器,因为explode 无法处理你想要的。在我看来,正则表达式有点矫枉过正。

【讨论】:

    【解决方案2】:

    只要引号内不能有引号(例如,"foo\"bar" 是不允许的),您就可以使用正则表达式来执行此操作。否则你需要一个完整的解析器。

    应该这样做:

    function split_words($input) {
      $matches = array();
      if (preg_match_all('/("([^"]+)")|(\w+)/', $input, $reg)) {
        for ($ii=0,$cc=count($reg[0]); $ii < $cc; ++$ii) {
          $matches[] = $reg[2][$ii] ? $reg[2][$ii] : $reg[3][$ii];
        }
      }
      return $matches;
    }
    

    用法:

    $input = 'windows linux "mac os x"';
    var_dump(split_words($input));
    

    【讨论】:

      【解决方案3】:

      要么按照Elzo Valugi 的建议让用户用逗号分隔他们的标签值,要么改进你的用户界面,以便用户一次输入一个标签(类似于 Google Wave 或 Wordpress 的标签用户界面)。我建议后者。

      如果您真的想坚持您建议的条目格式(我不建议这样做),您可以维护一个多词标签列表(那些不应该被拆分的标签)。将用户提供的组合标签字符串与此列表进行比较,并确保您没有拆分这些术语。如果您坚持使用这种方法,我可以详细说明,但我认为这不是一个好主意,因为输入格式本身存在缺陷。

      【讨论】:

      • 下划线_也可以用在标签中代替空格,然后一个简单的str_replace就完成了。
      • 这并不是对用户提出的真正合法要求
      【解决方案4】:

      你可以做一个正则表达式。我不是最擅长写它们,但这里的其他人应该能够匹配在没有引号的空格上打破它们的“单词”。

      【讨论】:

        【解决方案5】:

        当用户输入字符串"mac os x"时,你可以自动检测到空格,将字符串改为"mac-os-x",那么你仍然可以这样爆炸:

        $os = "metasys solaris mac-os-x";
        $strings = explode(' ', $os);
        

        您可以使用 replace 功能来做到这一点。

        【讨论】:

        • 这意味着用户一次输入一个标签,在这种情况下,可以将标签从一开始就分开。同样让用户将空格转换为“-”也不是很有用。
        • 即使用户一次输入一个标签,您也不会立即将其发送到服务器。顺便说一句,我谈论的是输入一个标签,然后点击回车按钮。它是用户友好的,它相当于中间的空格。在我的情况下,用户只需要按 ENTER,在另一种情况下,用户只需按空格键。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多