需要用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,'&');