我知道这有点奇怪,但我需要这个来完成我的任务。
我想将前两个单词移动到之后的两个单词,示例在我的(错误)代码中:
<?
$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
你能帮我做一个更好的代码吗?
每次循环中的代码运行时,$result
变量都会收到一个新值。
您应该只在序列的末尾附加单词。
因此,将循环替换为以下内容for
:
$result = $sentence2[2]." ".$sentence2[3]." ".$sentence2[0]." ".$sentence2[1];
for ($i = 4; $i < $total; ++$i) {
$result .= " ".$sentence2[$i];
}
在这种情况下,您也可以使用 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);
问题是你一直在覆盖结果。因此,当它第一次单步通过您的 for 循环时,字符串将是
two three zero one five
第二次将是
two three zero one six
等。
但是你只会看到它以 8 结尾,因为你只在末尾输出字符串。您应该将新字符串存储在变量中,并将下一个数字附加到该变量中。它应该读成类似;
<?
$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;
?>
这很好。
$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;