初めまして・こんにちは、システム事業部のARAです!

今回は、PHPの『配列の結合』について書きます。
と、その前に、今回の日記では配列について取り扱うので、添字の呼称について定義させてください。
——–
■呼称
(記述名:意味)
添字数字:配列のキー(添字)が数字であることを指します
添字文字:配列のキー(添字)が文字であることを指します
添字:文字と数字の双方を指します

■例
$a[0] = 1; // 0が添字数字
$a[‘a’] = 1; // aが添字文字

——–
================================
【配列の結合】
================================
もし、以下のようなことがしたいとき、あなたならどうしますか?

——————————–
■やりたいこと

配列$aと配列$bを結合する際、重複する添字は配列$aのデータを優先(維持)したい
——————————–

まず思い付くのは『array_merge』だと思います。
しかし、array_mergeでは『引数同士の添字数字が重複していても、上書きせずに第2引数の値が追加される』のです。

——————————–
■データ
$a = array(‘a’=>’a’, ‘b’=>’b’, 0=>0, 1=>1);
$b = array(‘a’=>1, ‘b’=>9, ‘c’=>’c’, 0=>2, 1=>3);
——————————–
■例1
$result = array_merge($a + $b);
——————————–

$resultのデータは「array(‘a’=>1, ‘b’=>9, ‘c’=>’c’, 0=>0, 1=>1, 2=>2, 3=>3)」になります。
・重複している添字文字(a、b)は第2引数($b)の内容で上書きされる
・重複していない添字文字(c)は維持される
・添字数字「0」「1」は重複に関係なく維持され、第2引数の添字数字(2、3)が第1引数の添字数字の連番として追加される

端的に第2引数のデータはすべてあるが、添字数字は維持されない状態になってしまいます。
$aと$bを逆にしても、添字数字のデータが「やりたいこと」とは異なります。
では、「やりたいこと」を満たすにはどうすれば良いか。

そう!プラス演算子を使用します!
たまに、繰り返し文を使って頑張って処理しているソースを見ますが、そんなことをする必要はありません。

——————————–
■例2
$result = $a + $b;
——————————–

そう。たったこれだけ。
では、$resultはどうなっているかと言うと「array(‘a’=>’a’, ‘b’=>’b’, 0=>0, 1=>1, ‘c’=>’c’)」となります。

配列$aに配列$bの添字’c’のデータ($b[‘c])を追加した形になります。
勿論、「特定の添字を$aに移さない場合」「特定の添字の場合に加工したデータを格納する」など特殊なことをやる場合は繰り返し文などを使用する必要がありますが、今回のような簡単な結合であれば「array_merge」などのPHPに用意された関数や「配列演算子」で十分です。
配列には「プラス演算子(+)」以外にも演算子があり、これらをまとめて「配列演算子」と呼称します。
興味がある方は、以下のPHPマニュアルをご確認ください。
http://php.net/manual/ja/language.operators.array.php

文字列比較など、PHPに用意されている関数や演算子というものは色々ありますので、調べてみてくださいね。

 

 

以上、配列結合に関する日記でした。
ここまでご覧頂き、ありがとうございました!