Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 应该使用哪个函数获取特定字符之前的字符串?_Php_Substr_Strstr - Fatal编程技术网

Php 应该使用哪个函数获取特定字符之前的字符串?

Php 应该使用哪个函数获取特定字符之前的字符串?,php,substr,strstr,Php,Substr,Strstr,或 我应该使用哪一个作为Vanesh获取输出?如果有任何关于速度和性能的理由,那就更好了 更新:输入变量可能有@符号,也可能没有。如果不是,字符串将按两个代码段中的原样写入。我将同时使用这两个代码段。首先检查@是否存在,然后检索第一个名称 与手册sais一样: 如果您只想确定某个特定的针是否出现在 haystack,使用更快、内存占用更少的函数strpos() 相反 像这样: $display_name = 'Vanesh@abc'; if( false !== strstr($displa

我应该使用哪一个作为Vanesh获取输出?如果有任何关于速度和性能的理由,那就更好了


更新:输入变量可能有@符号,也可能没有。如果不是,字符串将按两个代码段中的原样写入。

我将同时使用这两个代码段。首先检查@是否存在,然后检索第一个名称

与手册sais一样:

如果您只想确定某个特定的针是否出现在 haystack,使用更快、内存占用更少的函数strpos() 相反

像这样:

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

点,但是如果显示名称是:“@”怎么办?还是“abc”,前面没有瓦内什?这是一个可接受的解决方案吗?

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

3000.000发

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

速度的提高来自于节省时间反复重新计算相同的值。

这里是strstrstr和stru替换的混合。
Strstr返回在@之后的,stru replace使用该值将其替换为空

orig1 0.36397695541382s
orig1_unop 0.49177098274231s

看起来很快

为什么不能在
@
上使用explode?为什么不自己测试它,而不是把它作为一个问题发布?@SahilGulati:我喜欢使用explode()的想法使用任何你喜欢的函数,darlingdisplay的名称永远不会是@or@abc。谢谢再植并不像你想象的那么快。OPs-first方法的速度仍然是3v4l方法的两倍,奇怪的是@rndus的速度与3v4l所说的完全不符。请看这里vs我必须删除回音,否则3v4l将投诉。请看“用户时间”列,而不是“系统时间”。另外,看看PHP7.1和7.0。最后,仍然可以对OPs解决方案进行优化,最终在3v4l上的速度仍将提高30%
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;
    }
orig1 0.36397695541382s
orig1_unop 0.49177098274231s
$var ="Vanesh@abc";

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