【问题标题】:How do I remove everything after a space in PHP?如何在 PHP 中删除空格后的所有内容?
【发布时间】:2012-08-24 01:18:47
【问题描述】:

我有一个有名字的数据库,我想在名字的空格后使用 PHP 替换,数据示例:

$x="Laura Smith";
$y="John. Smith"
$z="John Doe";

我希望它返回

Laura
John.
John

【问题讨论】:

    标签: php replace preg-replace


    【解决方案1】:

    只是为了将它添加到组合中,我最近学习了这种技术:

    list($s) = explode(' ',$s);
    

    不过,我只是做了一个快速基准测试,因为我之前没有遇到过 strtok 方法,而且在给出的示例字符串上,strtok 比我的列表/爆炸解决方案快 25%。

    此外,初始字符串越长/分隔越多,性能差距就越大。给出一个 5000 个单词的块,explode 将创建一个包含 5000 个元素的数组。 strtok 将只取第一个“元素”并将其余的作为字符串留在内存中。

    所以 strtok 为我赢了。

    $s = strtok($s,' ');
    

    【讨论】:

      【解决方案2】:

      这样做,这将替换空格字符之后的任何内容。也可以用于破折号:

      $str=substr($str, 0, strrpos($str, ' '));
      

      【讨论】:

      • 这有两个潜在问题:当您使用 strrpos() 时,会搜索 last 空格,并且您可能会以“Hello Nice”之类的名称作为字符串,例如“你好,美好的世界”。第二点是,当名称中根本没有空格时,它不会返回任何内容。虽然可能需要这种行为,但也可能会引起烦恼。
      • @str 随意添加建议解决方案并添加到我的答案中
      【解决方案3】:

      试试这个

      <?php
      $x = "Laura Smith";
      echo strtok($x, " "); // Laura
      ?>
      

      strtok

      【讨论】:

        【解决方案4】:

        不需要使用正则表达式,只需使用explode方法即可。

        $item = explode(" ", $x);
        echo $item[0]; //Laura
        

        【讨论】:

        • 我认为你也可以做到 $item = explode(" ", $x)[0];
        【解决方案5】:

        TheBlackBenzKid 提供的方法对该问题有效 - 但是当出现不包含空格的参数时,它将返回一个空白字符串。

        虽然正则表达式的计算成本更高,但它们提供了更多的灵活性,例如:

        function get_first_word($str)
        {
         return (preg_match('/(\S)*/', $str, $matches) ? $matches[0] : $str);
        }
        

        【讨论】:

          【解决方案6】:

          你也可以这样做

          $str = preg_split ('/\s/',$x);
          print $str[0];
          

          【讨论】:

            【解决方案7】:

            这个答案将删除第一个空格之后的所有内容,而不是最后一个空格,就像接受的答案一样。使用strpossubstr

            $str = "CP hello jldjslf0";
            $str = substr($str, 0, strpos( $str, ' '));
            echo $str;
            

            【讨论】:

              【解决方案8】:

              有一个未提及的函数调用,我一直用于这个确切的任务。

              strstr() 第三个参数为true,将返回第一次出现的针字符串之前的子字符串。

              代码:(Demo)

              $array = [
                  'x' => 'Laura Smith',
                  'y' => 'John. Smith',
                  'z' => 'John Doe'
              ];
              
              foreach ($array as $key => $value) {
                  $array[$key] = strstr($value, ' ', true);
              }
              
              var_export($array);
              

              输出:

              array (
                'x' => 'Laura',
                'y' => 'John.',
                'z' => 'John',
              )
              

              注意,如果在字符串中找不到针,strstr() 将返回false

              附言

              • 因为有单功能技术可以执行此任务,没有令人信服的理由使用多功能技术来完成相同的工作。
              • 因为 needle 是一个静态字符串(一个空格),所以绝对没有理由引入正则表达式调用的开销
              • 如果有人正在考虑用the use of explode() 生成一个临时数组,而不是像strtok()strstr() 这样更直接的“字符串输入-字符串输出”操作,请务必声明@ 的第三个参数987654331@ 使用表示目标元素的索引 + 1 的整数 - 这样一来,函数将在隔离了您所寻找的子字符串后立即停止创建新元素。

              【讨论】:

                【解决方案9】:

                $x="劳拉·史密斯"; $temparray = implode(' ', $x); 回声 $temparray[0];

                对不起,有时会混淆内爆和爆炸......

                【讨论】:

                  猜你喜欢
                  • 2019-04-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-08
                  • 2021-06-09
                  • 2012-05-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多