PHP中与MySQL函数SUBSTRING_INDEX等效的函数是什么?

8

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

在PHP中是否有此函数的等价物?(或者用一些代码简单地实现它)


3
对于那些想使用substr的人,请阅读SUBSTRING_INDEX的定义。 - Mark Elliot
5个回答

19

没有一个单独的库函数可以提供相同的功能,但你可以使用一行代码:

$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));
    }
}

9

我认为

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

strstr函数是适合您的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
?>

0

如果你只需要 SUBSTRING_INDEX(str, delim, 1) 的等效值,你可以使用以下方法:

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

0

我很好奇并尝试了另一种方法,使用 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];
    }
  }
}

-2
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));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接