PHP - BASIC - 4. PHPの配列 - 7. 要素の入れ替え

先ほどのプログラム( array6.php )では配列 $names"Andy""Betty""Carol" と3人の名前が代入されていした。ここで "Andy""Carol" を入れ替えることを考えてみましょう。配列 $names の要素の並び順を "Carol""Betty""Andy" とするものとします。まずはよくある誤りから見てみましょう。次のプログラム( array7.php )を作成してみましょう。

<?php
$names = ["Andy", "Betty", "Carol"];
$names[0] = $names[2];
$names[2] = $names[0];
var_dump($names);

それではプログラムを実行してみましょう。

$ php array7.php
array(3) {
  [0]=>
  string(5) "Carol"
  [1]=>
  string(5) "Betty"
  [2]=>
  string(5) "Carol"
}

実行結果を見るとたしかに配列の先頭要素は "Carol" となっていますが、3つ目の要素も "Carol" となっています。さきほどのプログラムでは $names[0] = $names[2]; と実行した時点で、配列の先頭要素の "Andy" は上書きされてしまうため、このような結果となってしまいます。

このようなケースでは、次のようにもう一つ変数を用意することで解決できます。さきほどのプログラム( array7.php )を次のように修正してみましょう。

<?php
$names = ["Andy", "Betty", "Carol"];
$temp = $names[0];
$names[0] = $names[2];
$names[2] = $temp; 
var_dump($names);

上記のプログラムでは新たに $temp という名前の変数を用意することで、先頭要素の "Andy" を一時的に $temp 変数に保持するようにしています。 $temp という変数の名前は”Temporary(一時的)”という単語から付けています。プログラミングではよく使う単語なので覚えておくと良いでしょう。

それではプログラムを実行してみましょう。

$ php array7.php
array(3) {
  [0]=>
  string(5) "Carol"
  [1]=>
  string(5) "Betty"
  [2]=>
  string(4) "Andy"
}

実行結果から期待通り "Carol""Betty""Andy" の順に並んでいるのがわかります。

まとめ

  • 2つの要素を入れ替えることができる
  • ただし要素の入れ替えには工夫が必要
  • 一時的にデータを代入する変数を用意する