1. ホーム
  2. php

[解決済み] 2つの変数の値を入れ替えるPHPの関数はありますか?

2023-06-24 06:42:45

質問

例えば、私は...

$var1 = "ABC"
$var2 = 123

で、特定の条件下では、この2つを以下のように入れ替えたいのですが...

$var1 = 123
$var2 = "ABC"

これを行うためのPHPの関数はありますか?

$var3 = $var1
$var1 = $var2
$var2 = $var3

このような単純なタスクでは、おそらく第3の変数を使用する方が早いでしょうし、本当に必要であればいつでも独自の関数を作成できます。ただ、そのようなものが存在するかどうかは疑問に思っています。

更新:第3の変数を使用するか、関数でラップするのが最良の解決策です。これはクリーンでシンプルです。私は興味本位で質問をしましたが、選ばれた答えは「次善の策」のようなものでした。ただ、3番目の変数を使用します。

どのように解決するのですか?

TL;DR

組み込みの機能はありません。使用する swap3() を使ってください。

概要

多くの方がおっしゃっているように、この方法には複数の方法がありますが、最も注目すべきはこの4つの方法です。

function swap1(&$x, &$y) {
    // Warning: works correctly with numbers ONLY!
    $x ^= $y ^= $x ^= $y;
}
function swap2(&$x, &$y) {
    list($x,$y) = array($y, $x);
}
function swap3(&$x, &$y) {
    $tmp=$x;
    $x=$y;
    $y=$tmp;
}
function swap4(&$x, &$y) {
    extract(array('x' => $y, 'y' => $x));
}

4つのメソッドを1000回のforループでテストし、最も高速なものを探しました。

  • swap1() = のおおよその平均をスコア化したものです。 0.19 秒です。
  • swap2() =のおおよその平均を得点化したものです。 0.42 秒です。
  • swap3() =のおおよその平均を得点化したものです。 0.16 秒です。 優勝!
  • swap4() = のおおよその平均を得点化したものです。 0.73 秒です。

そして読みやすさのために、私は swap3() は他の関数より優れています。

ノート

  • swap2() そして swap4() は関数呼び出しのため、常に他のものよりも遅くなります。
  • swap1()swap3() の両者のパフォーマンススピードは非常に似ていますが、ほとんどの場合 swap3() の方がわずかに速いです。
  • 警告です。 swap1() は数字に対してのみ働きます!