2014-09-19 51 views
0

一些分隔符我在PHP女巫一个变量可以有这样的形状的字符串的一部分:。减去考虑在PHP

$a = 'help&type=client'; 
$b = 'account#client'; 
$c = 'info&type=client#new'; 

我需要创建一个。减去功能,将工作是这样的:

echo myFunction($a); //&type=client 
echo myFunction($b); //#client 
echo myFunction($c); //&type=client#new 

我会评价更简化的answere。

+0

你是如何决定哪些字符分隔符吗?是不是只需要URL params *或* URL片段的姓/值对?如果它有两个呢?你能澄清规则吗? – 2014-09-19 07:50:53

+0

这是:&或#。我需要一些简化的 – paulalexandru 2014-09-19 07:52:00

+0

在我看来,你实际上需要[parse_url'函数](http://php.net/parse_url) – 2014-09-19 08:09:21

回答

4

我认为最简单的方法是使用strpbrk

$a = 'help&type=client'; 
$b = 'account#client'; 
$c = 'info&type=client#new'; 
echo strpbrk($a, '&#') . PHP_EOL; //&type=client 
echo strpbrk($b, '&#') . PHP_EOL; //#client 
echo strpbrk($c, '&#') . PHP_EOL; //&type=client#new 
+0

如果你想echo $ c,发生了什么? – paulalexandru 2014-09-19 07:54:24

+0

@ paulalexandru,想要的结果。 – sectus 2014-09-19 07:56:31

+0

谢谢你,你的答案是我在这里找到的最好的,1行答案。非常感谢你。它的工作原理与我想要的一样。 – paulalexandru 2014-09-19 08:04:13

0

您可以使用正则表达式这个

preg_match('[^help](.*)', $help, $match) 
echo $match[0]; //&type=client 

preg_match('[^account](.*)', $help, $match) 
echo $match[0]; //#client 

你可以看到这个网站:http://regex101.com/r/zR9eD1/1有关这些表达式的更多信息。

只是一个快速的解释: 我们不匹配“救命”,我们确实匹配一切(“帮助”)之后

编辑: 如果你只有&或#,你可以使用这个分隔符:

preg_match('([#].+)', $help, $match) 
echo $match[0]; //#client 

这符合一切以#开始

+0

我需要一些通用的,因为我可以有更多的页面不仅帐户和帮帮我。我们应该counsider的&或#分隔符 – paulalexandru 2014-09-19 07:50:14

0

myFunction的将是这样的:

function myFunction($string) { 

    $amp = strpos($string, '&'); 
     if($amp) { 
      return substr($string,$amp,strlen($string)-$amp); 
     } else { 
      $hash= strpos($string, '#'); 
      return substr($string,$hash,strlen($string)-$hash); 
     } 
} 

您可能必须将if($amp)更改为if($amp > 0),具体取决于strpos的输出结果。

+1

我认为你的答案是好的,但我想多等一下,看看有人带来更简化的东西。 – paulalexandru 2014-09-19 07:51:30

+0

只是省略'substr'的​​最后一个参数,这是一个毫无意义的'strlen'调用:省略参数将默认为_“字符串的其余部分”_ – 2014-09-19 08:04:17

0

使用简单preg_split

function myFunction($var) { 
      return $var . "\n"; 
     } 

$a = 'help&type=client'; 
$b = 'account#client'; 

$as = preg_split('/(\w+)/', $a, 2); 
$bs = preg_split('/(\w+)/', $b, 2); 

echo myFunction($as[1]); // &type=client 
echo myFunction($bs[1]); // #client