Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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_String - Fatal编程技术网

需要用PHP删除字母后面的所有内容

需要用PHP删除字母后面的所有内容,php,string,Php,String,我有这个链接:http://www.youtube.com/e/fIL7Nnlw1LI&feature=related 我需要在PHP中完全删除链接中每个&之后的所有内容 因此它将变成:http://www.youtube.com/watch?v=fIL7Nnlw1LI 注意,它可能有多个& 必须从字符串中删除每个&、&包含之后的所有内容 如何在PHP中执行此操作?您可以执行以下操作: $var = "http://www.youtube.com/e/fIL7Nnlw1LI&featur

我有这个链接:
http://www.youtube.com/e/fIL7Nnlw1LI&feature=related

我需要在PHP中完全删除链接中每个
&
之后的所有内容

因此它将变成:
http://www.youtube.com/watch?v=fIL7Nnlw1LI

注意,它可能有多个
&

必须从字符串中删除每个&、&包含之后的所有内容

如何在PHP中执行此操作?

您可以执行以下操作:

$var = "http://www.youtube.com/e/fIL7Nnlw1LI&feature=related";

$url = explode("&", $var);
$url = $url[0]; //URL is now what you want, the part before First "&"

可以使用explode函数()拆分字符串$url=explode(&,$pinder),然后获取第一个数组元素

看看这个函数,它会告诉您,在您的例子中,字符的第一次出现在字符串中的什么位置。您可以从中检索所需的字符串片段。

您可以将
strpos
substr
组合使用:

$spos = strpos($s, "&");
$initial_string = $spos ? substr($s, 0, $spos) : $s;
不要使用explode、regexp或任何其他贪婪算法,这是对资源的浪费

编辑(添加的性能信息):

在preg_match文档中:

使用以下代码对自己进行测试:

$url        = "http://www.youtube.com/e/fIL7Nnlw1LI&feature=related&bla=foo&test=bar";

$time1      = microtime(true);
for ($i = 0; $i < 1000000; $i++)
{
    explode("&", $url);
    $url    = $url[0];
}
$time2      = microtime(true);
echo ($time2 - $time1) . "\n";

$time1      = microtime(true);
for ($i = 0; $i < 1000000; $i++)
{
    $ampPos = strpos($url, "&");
    if ($ampPos !== false)
        $url = substr($url, 0, $ampPos);

}
$time2      = microtime(true);
echo ($time2 - $time1) . "\n";

正如我在前一个问题中所写,您可以使用以下一行脚本:

$str = strtok($str,'&');

“每次之后”没有意义。你是说“第一次发生”吗?不,我是说我说的。这个链接也可以是youtube.com/e/fIL7Nnlw1LI&feature=related&etc=etc&that&blah=blah。所以在任何之后&“在任何之后”也没有意义——你必须告诉我们你想在哪里剪线!你想把它分割成一个由
&
分隔的片段集合,还是只想在第一个
&
之前取第一个部分,还是什么?当你在第一个之后删除所有内容时,你也在其他&s之后删除所有内容。你说得对,我应该添加这一点。现在加入它!谢谢。你可以这样写:if(!$ampPos=strpos($var,&'){更干净。这是另一个讨论,我认为这不是合适的地方。你能试着把我的答案也放在一边吗?1.9984130859375,当没有找到时也有效:)你的答案是最好的!
2.47602891922
2.0289251804352
$str = strtok($str,'&');