【PHP】連想配列を追加する方法
連想配列の追加
PHPで連想配列追加するにはいくつか方法があります。基本的なキーを指定する方法から、 array_merge関数・array_merge_recursive関数・プラス(+)演算子を使う方法があります。今回はこれらの使い方と違いについて確認していきましょう。
連想配列とは
連想配列も配列と同じく複数のデータをまとめて管理する箱のような役割を果たします。配列と連想配列の違いはインデックス番号で要素を管理するのではなく、「キー」と呼ばれる文字列などで要素を管理することです。配列は番号で要素を管理しますが、連想配列は名前をつけて要素を管理します。
使い方
連想配列は$配列名 = array('キー名' => '値1', ・・・);
と「=>」を用いてキーと値をセットします。
$user = array(
‘name’ => ‘たなか’ ,
‘age’ => ‘30’ ,
‘gender’ => ‘男’
);
連想配列の値を取り出すには、対応するキーを指定します。
echo $fruit [‘name’]; // 出力結果:たなか
すでにあるキーを指定すると上書きされます。
$user[‘age’] = ‘20’;
出力結果
Array
(
[name] => ‘たなか’;
[age] => ‘20’;
[gender] => ‘男’;
[hobby] => ‘映画鑑賞’;
)
連想配列の追加
キーを指定して要素の追加
$user[‘hobby’] = ‘映画鑑賞’;
print_r($user);
出力結果
Array
(
[name] => ‘たなか’;
[age] => ‘30’;
[gender] => ‘男’;
[hobby] => ‘映画鑑賞’;
);
キーを指定して要素を追加すると、連想配列に追加することができます。また、すでにあるキーを指定した場合は上書きされることに注意しましょう。同じ値は連想配列内に2つ以上存在することができますが、同じキーは連想配列内に1つしか存在できません。
キーを指定しないで要素の追加
$user[] = ‘日本’;
$user[] = ‘東京都’;
print_r($user);
出力結果
Array
(
[name] => ‘たなか’
[age] => ‘30’
[gender] => ‘男’
[hobby] => ‘映画鑑賞’
[0] => ‘日本’
[1] => ‘東京都’
)
キーを指定せずに追加することも可能です。キーを指定せずに追加した場合は、0から自動でインデックス番号がキーとして割り振られます。
連想配列の追加 関数編
array_merge関数
array_merge関数を利用することで、merge = 併合する・溶け合わせるという単語の意味通り配列に値を追加することができます。array_merge関数は単純に連想配列に値を追加するのではなく、配列の要素の最後に配列を結合するときに使用します。
// 配列を作成
$fruit1 = [
0 => 'りんご',
1 => 'もも',
2 => 'みかん'
];
$fruit2 = [
3 => 'ぶどう',
4 => 'なし',
5 => 'さくらんぼ'
];
// 配列を結合
$fruits = array_merge($fruit1, $fruit2);
print_r($fruits);
出力結果
Array
(
[0] => りんご
[1] => もも
[2] => みかん
[3] => ぶどう
[4] => なし
[5] => さくらんぼ
)
array_merge関数を使うことで$fruit1と$fruit2を結合させることができます。array_merge関数にはいくつかのルールがあります。場合分けをして確認してみましょう。
キーが重複しているとき<数字>
$fruit1 = [
0 => 'りんご',
1 => 'もも',
2 => 'みかん'
];
$fruit2 = [
0 => 'ぶどう',
1 => 'なし',
2 => 'さくらんぼ'
];
$fruits = array_merge($fruit1, $fruit2);
print_r($fruits);
出力結果
Array
(
[0] => りんご
[1] => もも
[2] => みかん
[3] => ぶどう
[4] => なし
[5] => さくらんぼ
)
今回は$fruit1と$fruit2のキーの数字が重複しています。キーを数字で指定し重複する場合は、前のインデックス番号の続きから連続した数値に置き換えられます。今回は$fruit2のキーが0,1,2から、3,4,5に置き換えられました。
キーが重複しているとき<文字列>
次にキーを文字列で指定し、重複した場合をみていきましょう。
$fruit1 = [
'a' => 'りんご',
'b' => 'もも',
'c' => 'みかん'
];
$fruit2 = [
'a' => 'ぶどう',
'b' => 'なし',
'c' => 'さくらんぼ'
];
$fruits = array_merge($fruit1, $fruit2);
print_r($fruits);
出力結果
Array
(
[a] => ぶどう
[b] => なし
[c] => さくらんぼ
)
文字列のキーが重複した場合は、前の配列を後ろの配列が上書きします。キーが数字のときと、文字列のときで重複した場合異なることに注意しましょう。
array_merge_recursive関数
array_merge_recursive関数はarray_merge関数と異なり、文字列のキーが重複したときに値を上書きせず、同じ文字同士で配列を作ります。
$user1 = [
'name' => 'たなか',
'age' => '30',
'gender' => '男',
'hobby' => '映画鑑賞'
];
$user2 = [
'name' => 'さとう',
'age' => '20',
'gender' => '女'
];
$users = array_merge_recursive($user1, $user2);
print_r($users);
出力結果
Array
(
[name] => Array
(
[0] => たなか
[1] => さとう
)
[age] => Array
(
[0] => 30
[1] => 20
)
[gender] => Array
(
[0] => 男
[1] => 女
)
[hobby] => 映画鑑賞
)
重複した文字列のキーで配列を作成し、重複のないhobbyはそのまま結合されます。キーが数字の場合はarray_merge関数と同じ扱いをします。
プラス(+)演算子
プラス(+)演算子でも配列を結合することができます。使い方は演算式と同じように$配列1 + $配列2
と記述します。基本的にはarray_merge関数とほとんど同じ役割をします。
$fruit1 = [
'a' => 'りんご',
'b' => 'もも',
'c' => 'みかん',
];
$fruit2 = [
'd' => 'ぶどう',
'e' => 'なし',
'f' => 'さくらんぼ',
];
$fruits = $fruit1 + $fruit2;
print_r($fruits);
出力結果
Array
(
[a] => りんご
[b] => もも
[c] => みかん
[d] => ぶどう
[e] => なし
[f] => さくらんぼ
)
プラス(+)演算子array_merge関数の大きな違いは、キーが文字列で重複するときです。array_merge関数との違いについて確認してみましょう。
$fruit1 = [
'a' => 'りんご',
'b' => 'もも',
'c' => 'みかん',
];
$fruit2 = [
'a' => 'ぶどう',
'b' => 'なし',
'c' => 'さくらんぼ',
];
$fruits = $fruit1 + $fruit2;
print_r($fruits);
出力結果
Array
(
[a] => りんご
[b] => もも
[c] => みかん
)
array_merge関数では後の配列が前の配列を上書きしていたのに対し、プラス(+)演算子は前の配列が優先されます。
まとめ
array_merge関数・array_merge_recursive関数・プラス(+)演算子の違いは、連想配列を追加・結合するときに文字列で指定されたキーが重複したときの処理です。
・array_merge関数は後の配列が上書きされる
・プラス(+)演算子は前の配列が優先される
・array_merge_recursive関数は同じキーで配列を作成する
いかがでしょうか。結合するときに使う関数によって、配列の結果は大きく異なります。実際にコードを打ち込んで違いを確認してみましょう。