哪个函数应该用于在特定字符之前获取字符串?

时间:2017-09-11 09:32:36

标签: php substr strstr

$variable ="Vanesh@abc";

if (strpos($variable, '@') !== false) {
  $variable = substr($variable, 0, strpos($variable, "@"));
}
 echo $variable;

OR

  $display_name = 'Vanesh@abc';
if( false !== strstr($display_name,"@",true) ) {
      $display_name = strstr($display_name,"@",true);
    } 
 echo $display_name;

我应该使用哪一个来输出 Vanesh ?如果有任何关于速度和性能的原因会更好。

更新:可能存在输入变量可能包含@符号或不具有@符号的情况。如果不是,则将在两个代码片段中写入字符串。

3 个答案:

答案 0 :(得分:1)

我同意两者。首先检查@是否存在,然后检查第一个名称。

与手动sais一样:

  

如果您只想确定特定针是否在其中   haystack,使用更快,内存更少的内存密集函数strpos()   代替。

像这样:

$display_name = 'Vanesh@abc';
if(strpos($display_name, '@') !== false) { // we only need to know if the @ occurs here.
      $display_name = strstr($display_name,"@",true); // here we wish to retrieve the first name
} 
echo $display_name;

要注意的是,如果显示名称是“@”,该怎么办?还是“@abc”,前面没有vanesh?这是一个可以接受的解决方案吗?

答案 1 :(得分:1)

所以这是一个实际的速度比较。获胜者是您的第一个功能的优化版本:Speed Comparison

function orig1($variable)
    {
    $s = strpos($variable, '@');
    if ($s !== false)
        {
        $variable = substr($variable, 0, $s);
        }

    return $variable;
    }

function orig1_unop($variable)
    {
    if (strpos($variable, '@') !== false)
        {
        $variable = substr($variable, 0, strpos($variable, '@'));
        }

    return $variable;
    }

3.000.000回合

orig1 0.36397695541382s
orig1_unop 0.49177098274231s

加速来自于节省一遍又一遍地重新计算相同值的时间。

答案 2 :(得分:0)

这是strstr和str_replace的混合 Strstr返回之后的,而str_replace使用它来替换它。

$var ="Vanesh@abc";

echo str_replace(strstr($var, '@') , "", $var); 

似乎很快。 https://3v4l.org/ngCG7/perf#output