2014-09-19 76 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