はじめに
この記事では、PHPで2つの変数の中身を入れ替える方法を紹介します。
C++などの他の言語にあるswap関数のようなものはPHPにはありませんが、簡単に実現できます。
方法を2つ紹介するのでぜひ参考にしてください。
ことれいのもり
2025-12-11
この記事では、PHPで2つの変数の中身を入れ替える方法を紹介します。
C++などの他の言語にあるswap関数のようなものはPHPにはありませんが、簡単に実現できます。
方法を2つ紹介するのでぜひ参考にしてください。
PHPのlist()を使う方法です。
この方法が一番簡単かつ短く書くことができます。
PHPのlist()を使うと、配列から値を順番に取り出して変数に代入できます。
記述方法は以下の通りです。
list($変数1, $変数2, ...) = $配列;
例えばフルーツの中身が格納されている配列 fruits の中身を、それぞれ別の変数に格納してみます。
$fruits = ["apple", "orange", "peach"];
list($a, $b, $c) = $fruits;
echo $a . PHP_EOL; // apple
echo $b . PHP_EOL; // orange
echo $c . PHP_EOL; // peach注目すべきポイントは、list()を使っている部分です。
list($a, $b, $c) = $fruits;この部分は、配列の中身を一つずつ変数に代入する処理をしています。
次のコードと同じ意味です。
$a = $fruits[0];
$b = $fruits[1];
$c = $fruits[2];このような操作を一括で行なってくれるのがlist()です。
今回は3つの変数に代入をしましたが、4つでも5つでも、一行で各変数に代入できます。
list()を使えば、2つの変数の値を交換することができます。
さっそくコードを見てみましょう。
$a = 10;
$b = 20;
echo "交換前" . PHP_EOL;
echo "a = " . $a . PHP_EOL; // 10
echo "b = " . $b . PHP_EOL; // 20
// swapする
list($a, $b) = [$b, $a];
echo "交換後" . PHP_EOL;
echo "a = " . $a . PHP_EOL; // 20
echo "b = " . $b . PHP_EOL; // 10実行結果は以下の通りです。交換されていますね!

注目すべきポイントは、list()の部分です。
list()は右辺に渡す配列の値を左辺の変数にコピーします。
そのため、左辺には交換後の値に並び替えた配列を用意します。
// list()の部分の右辺
[$b, $a] → [20, 10] // ここで交換後の配列を用意するこの処理を行なうことで、左辺の変数に順番に代入されます。
$a = 20; // 右辺の配列の「0番目」が代入される
$b = 10; // 右辺の配列の「1番目」が代入されるC言語などでは、交換するときに一旦別の値に代入する必要があったため、直感的に理解しにくいです。
一方でPHPのlist()は、見た目をそのまま代入しているので、可読性も向上しています。
さらに、list()は2つの値を交換する以上のこともできます!
list()の良いところは、3つ以上の交換も同じように実装できるところです。
(a, b, c)を(c, a, b)と並び替えたい時を考えてみます。
$a = 10;
$b = 20;
$c = 30;
echo "交換前" . PHP_EOL;
echo "a = " . $a . PHP_EOL;
echo "b = " . $b . PHP_EOL;
echo "c = " . $c . PHP_EOL;
// a→c, b→a, c→b に入れ替え
list($a, $b, $c) = [$c, $a, $b];
echo "交換後" . PHP_EOL;
echo "a = " . $a . PHP_EOL;
echo "b = " . $b . PHP_EOL;
echo "c = " . $c . PHP_EOL;実行結果は以下の通りです。
3つでも交換されていますね!
list()の引数を増やすことで、複数の値を簡単に交換できます!
C++のようなswapをPHPで再現したいときは、参照渡しを使うことでも実装できます。
function swap(&$a, &$b)
{
$temp = $a;
$a = $b;
$b = $temp;
}
$a = 10;
$b = 20;
echo "交換前" . PHP_EOL;
echo "a = " . $a . PHP_EOL;
echo "b = " . $b . PHP_EOL;
swap($a, $b);
echo "交換後" . PHP_EOL;
echo "a = " . $a . PHP_EOL;
echo "b = " . $b . PHP_EOL;
実行結果は以下の通りです。

この方法でも実装できますが、あまりオススメはできません。
その理由は、以下の通りです。
なによりlist()を使えば1行で実装できるので、参照渡しまでして関数化するメリットが薄いです。
C++系からPHPを学ぶ人や、swap関数を作りたいという目的があるなら問題ありません。
普通に使う分にはlist()を使いましょう!
今回は、値の交換を実装する方法として、list()と参照渡しの2つを紹介しました。
私自身、以前はC++を勉強していた影響で、swap関数を参照渡しで実装していました。
しかし、実務ではあまり使わないことを知り、調べた結果、PHPではlist()で簡単に値を交換できることを知りました。
私も最初は非効率な方法を使っていたんです・・・。
何が言いたいかというと、自分の知識を使って実装して間違っていても、そこから新たに学べば問題ないということです。
きっと私のように、list()の存在を知らない人がいると思います。
そんな人が、この記事で初めて知って参考になれば嬉しいです!