2012-07-06 28 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

相关问题