PHPプロ!TIPS+

配列の + (プラス) 演算子

PHPにはソートや検索など多彩な配列関数が備わっています。それらの配列関数は非常に便利なものですが、意外と知られていないPHPの機能として配列の + 演算子があります。この + 演算子を使用すると、foreachなどの繰り返し処理を行っている部分をもっと簡単に記述できるかもしれません。

配列を2つ結合するのに一番よく使用される関数は、おそらく array_merge ではないでしょうか。ただし、array_merge 関数を使用すると数字キーの番号がふり直されてしまうので、キーが数字形式の連想配列を扱う場合に少々やっかいです。

array_mergeのマニュアルに記載されているように、「配列を完全に維持し、単に追加だけしたい場合には、+ 演算子を使用してください」とあるように+ 演算子を使用すると、数字でも文字列でも配列のキーを完全に保持することができます。

では、PHPマニュアルの配列演算子(http://www.phppro.jp/phpmanual/php/language.operators.array.html)についてのページを見てみましょう。「$a + $b」というようなプラス演算子について、以下のような説明が見つかるでしょう。

-----
+ 演算子は左側の配列に右側の配列の内容を追加します。重複しているキーは上書き「されません」。
-----

とあります。重複しているキーは上書きされないので、普通の四則演算のように+ 演算子の左と右の変数を交換すると答えが変わってしまいます。

<?php
$a 
array("a" => "apple""b" => "banana");
$b array("a" => "pear""b" => "strawberry""c" => "cherry");

// $c = $a + $b と等価
$c $a;
foreach (
$b as $key => $val) {
  if (!isset(
$a[$key])) {
    
$c[$key] = $val;
  }
}
print_r($c);

// $d = $b + $a と等価
$d $a;
foreach (
$b as $key => $val) {
  
$d[$key] = $val;
}
print_r($d);
?>

上からも $a+$b≠$b+$a ということがわかるでしょう。2つの処理のうち、$d =$b + $a; と記述すればよい部分を、foreachを使って処理している方もいるのではないでしょうか。

連想配列の結合には + 演算子を、数字キーの配列の結合には array_merge 関数、というのが一般的な使用方法ではないでしょうか。もし配列の + 演算子を知らなかった方はこれを機会に、ぜひ使用して下さい。

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)