2012-07-06 19 views
0

我知道這有點奇怪,但我需要這個來完成我的任務如何在PHP中將前兩個單詞移動到後面的兩個單詞?

我想的前兩個單詞移到此後兩個詞,例如在我的(錯誤)代碼:

<? 
$sentence = "zero one two three four five six seven eight"; 
$sentence2 = explode (" ",$sentence); 
$total = count($sentence2); 
for ($i = 4; $i < $total; ++$i) { 
$result = $sentence2[2]." ".$sentence2[3]." ".$sentence2[0]." ".$sentence2[1]." ".$sentence2[$i]; 
} 
echo "Original sentence : ".$sentence; 
echo "<br>Result : ".$result; 
?> 

但從碼結果不是我想要的,結果是

two three zero one eight 

我想要的結果:

two three zero one four five six seven eight 

你能幫我做一個更好的代碼?

回答

1

每次循環中的代碼運行時,$result變量都會收到一個新值。

您應該只在附加單詞在序列的末尾。

因此,通過這種代替你for循環:

$result = $sentence2[2]." ".$sentence2[3]." ".$sentence2[0]." ".$sentence2[1]; 
for ($i = 4; $i < $total; ++$i) { 
    $result .= " ".$sentence2[$i]; 
} 
+0

感謝您的幫助:)工作 – 2012-07-06 11:51:13

+0

謝謝,Masykur。請閱讀此:http://meta.stackexchange.com/a/5235/149253 – 2012-07-06 11:53:49

0

的問題是,你重寫結果所有的時間。 因此,當它通過你的for循環的第一次步字符串將

two three zero one five 

第二次,將

two three zero one six 

但你只會看到它結束由於您僅在最後輸出字符串,所以請按八。 你應該將你的新字符串存儲在一個變量中,並附上你的下一個數字。 它應該讀取像;

<? 
$sentence = "zero one two three four five six seven eight"; 
$sentence2 = explode (" ",$sentence); 
$total = count($sentence2); 
$result = $sentence2[2]." ".$sentence2[3]." ".$sentence2[0]." ".$sentence2[1]." "; 
for ($i = 4; $i < $total; ++$i) { 
$result = $result." ".$sentence2[$i]; 
} 
echo "Original sentence : ".$sentence; 
echo "<br>Result : ".$result; 
?> 
+0

謝謝你的解釋:) – 2012-07-06 11:57:16

0

這很有用。

$sentence = "zero one two three four five six seven eight"; 
$sentenceParts = explode (" ",$sentence); 

$itemCount = count($sentenceParts); 
$result = $sentenceParts[2]." ".$sentenceParts[3]." "; 
for($i = 0; $i < $itemCount; $i++) { 
    if($i != 2 && $i !=3) { 
     $result .= $sentenceParts[$i]." "; 
    } 
} 

echo $result; 
1

您還可以使用array_splice對於這種情況

$sentence = "zero one two three four five six seven eight"; 
$words = explode(" ",$sentence,3); 
$base  = explode(" ",$words[2]); 
array_splice($base,2,0,array($words[0],$words[1])); 
echo implode(" ",$base); 

或一個在線解決方案,:-)

echo preg_replace('#^(\w+\s+)(\w+\s+)(\w+\s+)(\w+\s+)#','$3$4$1$2',$sentence); 
+0

謝謝你的更好的代碼 – 2012-07-06 12:02:54

相關問題