0

これはちょっと奇妙ですが、タスクを完了するにはこれが必要です。

最初の2つの単語をその後の2つの単語に移動したいのですが、例は私の(エラー)コードにあります:

<?
$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

より良いコードを作成するのを手伝ってもらえますか?

4

4 に答える 4

1

ループ内のコードが実行されるたびに、$result変数は新しい値を受け取ります。

シーケンスの最後にのみ単語を追加する必要があります。

forしたがって、ループを次のように置き換えます。

$result = $sentence2[2]." ".$sentence2[3]." ".$sentence2[0]." ".$sentence2[1];
for ($i = 4; $i < $total; ++$i) {
    $result .= "  ".$sentence2[$i];
}
于 2012-07-06T11:49:02.283 に答える
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);

または1行のソリューション、:-)

echo preg_replace('#^(\w+\s+)(\w+\s+)(\w+\s+)(\w+\s+)#','$3$4$1$2',$sentence);
于 2012-07-06T11:58:34.307 に答える
0

問題は、常に結果を上書きすることです。したがって、最初に for ループをステップ実行すると、文字列は次のようになります。

two three zero one five

2回目になります

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;
?>
于 2012-07-06T11:50:23.280 に答える
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;
于 2012-07-06T11:55:08.490 に答える