2012-07-28 130 views
0

我一直在試圖將3個字符串合併爲一個,並且遇到問題。將3個字符串合併爲一個

字符串在下面。

$from="/2/3/4/5/6/"; 
$to="/30/31/32/33/34/"; 
$sub="/2/3/4/5/6/7/8/9/10/11/12/";#this is dynamic, ever changing past > (/2/3/4/5/6/) 

輸出必須如下所示。

$output="/30/31/32/33/34/6/7/8/9/10/11/12/"; 

否則,如果$sub變化如下。

$from="/2/3/4/5/6/"; 
$to="/30/31/32/33/34/"; 
$sub="/2/3/4/5/6/7/8/"; 
$output="/30/31/32/33/34/6/7/8/"; 

否則如果$to改變那麼這個。

$from="/2/3/4/5/6/"; 
$to="/30/31/"; 
$sub="/2/3/4/5/6/7/8/"; 
$output="/30/31/6/7/8/"; 

$to首先需要,則$sub末,減去端/*/(eg./6/)$from組合成1串。

這怎麼可能?

+1

如果分隔符始終是一個'/'你可以只需拆分字符串,然後從3個結果數組中生成你喜歡的字符串。 – nkr 2012-07-28 19:04:21

+1

如果$ from =「/ 2/3/4/5/6 /」,$ to =「/ 30/31/32/33/34 /」以及$ sub =「/ 2/3/4/5/7/8 /「(注:不是6)?你想輸出爲「/ 2/3/4/5/7/8 /」嗎?或者也許是「/ 30/31/32/33/34/7/8 /」?或者是其他東西? – hvd 2012-07-28 19:08:31

+0

@ hvd-> if $ from =「/ 2/3/4/5/6 /」,$ to =「/ 30/31/32/33/34 /」和$ sub =「/ 2/3/4/6/5/7/8 /「輸出將被輸出=」/ 30/31/32/33/34/6/5/7/8 /「,包括最後/ 6// 2/3/4 /「輸出將爲$ output =」/ 30/31/32/33/34/4/6/5/7/8 /「 – 1Rabbit 2012-07-28 19:15:11

回答

0

你基本上是在字符串內部存儲序列化的數組結構。聰明Exploding應該有所幫助:

$output = $to 
    . implode('/', array_diff(
     explode('/', $sub), 
     array_slice(explode('/', $from), 0, -2) 
    )) . '/'; 

另一種可能是正則表達式

+0

這不會導致期望的輸出。 – hvd 2012-07-28 19:12:55

+0

@knittl>如果我使用str_replace,我將如何排除最後一個/ * /從$ from?例如。如果$ from =「/ 2/3/4/5/6/7/8 /」;我如何讓$看起來像這樣$ from =「/ 2/3/4/5/6/7 /」;?能夠放入該str_replace? – 1Rabbit 2012-07-28 19:17:18

+0

@ 1Rabbit:看看我更新的答案(使用數組) – knittl 2012-07-28 19:31:15

0

這可能會幫助你得到你所期待的:

$str1 = substr($from, -2); 
$pos = strpos($sub,$str1); 
$str2 = substr($sub,$pos); 
$output = $to.$str2; 
相關問題