[PHP]2つの変数の値を入れ替える方法。値のスワップ

Read More


2つの変数の中身を入れ替えることを値のスワップという。


今日同僚に、「こんなやり方もあるよ」と教わった方法が自分にとってちょっと目から鱗だったのでメモしておく。



まず従来の値の入れ替え方はこんな感じ。
■値の入れ替え:従来版
<?php
$a='aaa';
$b='bbb';

$temp = $a;
$a = $b;
$b = $temp;
?>

うん、ごく普通。
ありきたり。

$aの値を一時的な変数に格納している。
このやり方だと3行のコード量となる。


これに対しスマートな方法での値の入れ替え↓


■値の入れ替え:スマート版
<?php
list($b, $a) = array($a, $b);
?>

な、なんと1行で済んだ。
$tempなどという一時変数も用意しなくてよい。


ただし何の前フリもない初見だと???となりかねないので、
末尾にコメントを付けておいてあげたほうがよさげ。



このスマートな方法で面白い点は入れ替えする変数の数が多くなった時も1行でいけるところ。
<?php
list($b, $c, $d, $a) = array($a, $b, $c, $d);
?>





使いどころとしては、
処理をカプセル化しているような隠れた部分で使うのがよいかと。

表で使っちゃうのはちょっと気が引ける。





--
ネットで調べてみると何年か前の記事で同じ内容が取り上げているものがあった。

PHPの、というより他言語から来た文化なのではないかと推測する。






Comments(2)

1  イトー  2015/01/21 (水) 00:47 ID:5M8zkkc15
↓こんなのはいかがでしょうか?
$a ^= $b;
$b ^= $a;
$a ^= $b;

リソースの少なかった時代のテクですが。。。

2  シラサヤ  2015/01/26 (月) 11:54 ID:Rq9EdEF15
なにこれ!?
ビットのフィルターがかかってるの??
動きを試してみたけどよくわからんなあ。

以下気が付いたこと
・数値(ex:1)と数値(ex:2)の入れ替えなら問題なく動く
・同じ長さの文字列(ex:'aaa')と文字列(ex:'bbb')の入れ替えも問題なく動いた
・数値(ex:1)と文字列(ex:'a')の入れ替えではダメ
・長さの違う文字列(ex:'aaa', 'b')の入れ替えもダメ