【问题标题】:PHP: equivalent of MySQL's function SUBSTRING_INDEX ?PHP:相当于 MySQL 的函数 SUBSTRING_INDEX ?
【发布时间】:2011-10-16 16:19:12
【问题描述】:

我喜欢 MySQL 中的 SUBSTRING_INDEX 函数,尤其是因为您可以使用负索引从字符串的右侧开始搜索。

PHP 中是否有与此功能等效的功能? (或使用一些代码的简单方法)

【问题讨论】:

标签: php mysql substring


【解决方案1】:

如果您只需要 SUBSTRING_INDEX(str, delim, 1) 的等效项,则可以使用:

list($str,) = explode($delim, $str);

【讨论】:

    【解决方案2】:

    我很好奇并使用 preg/match 设置测试了另一种方法,然后对其进行了重构以允许任意数量的分隔符/计数。我在另一个示例使用的计数检查中添加了,但我可能还会建议对分隔符字段进行某种清理。

    function substring_index($subject, $delim, $count){
      if($count < 0){
        $notRe = '[^\\'.$delim.']*';
        $elem = array();
        for($x=1;$x<=$count;$x++){
          array_push($elem,$notRe);
        }
        $re = '/^('.implode('\\'.$delim,$elem).')/';
        preg_match($re, $subject,$m);
        if(count($m) == 2) {
          return $m[1];
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      我觉得

      string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
      

      是适合你的 php 函数。

      strstr — 查找第一次出现的字符串

      <?php
      $email  = 'name@example.com';
      $domain = strstr($email, '@');
      echo $domain; // prints @example.com
      
      $user = strstr($email, '@', true); // As of PHP 5.3.0
      echo $user; // prints name
      ?>
      

      【讨论】:

        【解决方案4】:

        没有一个库函数可以为您提供相同的功能,但您可以获得单行:

        $str = "www.mysql.com";
        echo implode('.', array_slice(explode('.', $str), 0, 2)); // prints "www.mysql"
        echo implode('.', array_slice(explode('.', $str), -2));   // prints "mysql.com"
        

        很容易把它变成一个函数:

        function substring_index($subject, $delim, $count){
            if($count < 0){
                return implode($delim, array_slice(explode($delim, $subject), $count));
            }else{
                return implode($delim, array_slice(explode($delim, $subject), 0, $count));
            }
        }
        

        【讨论】:

          【解决方案5】:
          function substring_index($subject, $delim, $count){
              if($count < 0){
                  return implode($delim, array_slice(explode($delim, $subject), $count));
              }else{
                  return implode($delim, array_slice(explode($delim, $subject), 0, $count));
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2012-08-17
            • 2014-07-14
            • 1970-01-01
            • 2018-11-30
            • 1970-01-01
            • 2016-01-01
            • 2010-10-20
            • 1970-01-01
            • 2023-01-27
            相关资源
            最近更新 更多