如何在 PHP 中将前两个单词移动到后面的两个单词


How to Move the first two words to the two words thereafter in 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

你能帮我做一个更好的代码吗?

每次循环中的代码运行时,$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;