最終更新日:
公開日:
レシピ
配列
複数の配列を1つに統合する
array_merge関数を使って、複数のバラバラになった配列を1つに統合することができます。
この記事のポイント
- array_merge関数を使ってバラバラの配列を1つの配列に統合する
- 多次元配列も統合できる
目次
概要
最初に、array_merge関数について解説します。
最低でも1つ以上の配列をパラメータに指定する必要があります。
2つ目以降は必要な数だけ指定可能です。
それでは、実際にコードの動作をみていきましょう。
複数の配列を1つに統合
別々に用意した3つの配列を、1つの配列に統合して$resultへ格納します。
PHP コード例
// 変数の初期化
$result = null;
// 個人情報
$personalData = array(
"name" => "Alex",
"gender" => "men",
"age" => 30
);
// 連絡先
$contactData = array(
'email' => 'nickerdoodle@sample.com',
'phone_number' => '080-xxxx-xxxx'
);
// 住所
$addressData = array(
'zip_code' => '350-1124',
'address' => '埼玉県 川越市 新宿町',
'building' => '川越ヒルズ 305',
);
$result = array_merge( $personalData, $contactData, $addressData);
var_dump($result);
var_dump関数の出力結果を見ると、それぞれの配列の値が$resultに入っていることを確認できます。
多次元配列を統合
同じように多次元配列を統合することも可能です。
PHP コード例
// 変数の初期化
$result = null;
// 個人情報
$personalData = array(
"name" => "Alex",
"gender" => "men",
"age" => 30,
"contact" => array(
'email' => 'nickerdoodle@sample.com',
'phone_number' => '080-xxxx-xxxx'
)
);
// 自宅
$addressData = array(
'zip_code' => '350-1124',
'address' => '埼玉県 川越市 新宿町',
'building' => '川越ヒルズ 305',
'contact' => array(
'phone_number' => '049-xxxx-xxxx',
'fax_number' => '049-xxxx-xxxx'
)
);
// 緊急連絡先
$emergencyContact = array(
"contact" => array(
'emergency' => '090-2222-xxxx',
)
);
$result = array_merge( $personalData, $addressData, $emergencyContact);
var_dump($result);
実行結果
統合前の3つの配列は全て、「contact」というキーを持った配列を持っています。
その場合は一番最後の配列の値が優先されて統合が行われます。
「contact」の中で「phone_number」や「emergency」などのキーが重複していなくても、最後に登場した「contact」の内容のみが引き継がれます。
そのため、もし統合前の配列が多次元配列の場合は、同じキーを持った配列を含んでいないか注意する必要があります。
予めキーが重複する可能性がある場合は、次のようなコードに修正することで内容を上書きしないようにすることが可能です。
PHP コード例
// 変数の初期化
$result = null;
// 個人情報
$personalData = array(
"name" => "Alex",
"gender" => "men",
"age" => 30,
"contact" => array(
'email' => 'nickerdoodle@sample.com',
'phone_number' => '080-xxxx-xxxx'
)
);
// 自宅
$addressData = array(
'zip_code' => '350-1124',
'address' => '埼玉県 川越市 新宿町',
'building' => '川越ヒルズ 305',
'contact' => array(
'phone_number' => '049-xxxx-xxxx',
'fax_number' => '049-xxxx-xxxx'
)
);
// 緊急連絡先
$emergencyContact = array(
"contact" => array(
'emergency' => '090-2222-xxxx',
)
);
// 一旦、普通に統合する
$result = array_merge( $personalData, $addressData, $emergencyContact);
// 重複する配列のみ、改めて統合する
$result['contact'] = array_merge( $personalData['contact'], $addressData['contact'], $emergencyContact['contact']);
var_dump($result);
実行結果
それぞれの配列の持つ値が引き継がれるようになりました。
ただし、$personalDataと$addressDataにあるphone_numberはキーが重複しているため、パラメータの指定順で後ろにきている$addressDataの値が引き継がれています。