PHPで複数の配列を結合(マージ)してひとつにまとめるにはarray_merge
関数を使う方法、array_merge_recursive
関数を使う方法、配列結合演算子+
を使う方法があります。これらの違いと使い方を解説します。
array_merge関数の使い方
結合する配列が、添字配列(キーが数字の配列)なのか連想配列(キーが文字列の配列)なのかによって、結合のされかたが異なります。
添字配列の場合
添字配列を結合した場合は、引数として渡した配列の値が渡した順番通りに結合されます。添字(キー)は新たに0
から振り直されます。
//配列の準備
$array1 = array('ソムリエ', '鳶職', 'YouTuber');
$array2 = array('2.5次元俳優', 'ハイパーメディアクリエイター', '傭兵');
//結合
$array = array_merge($array1, $array2);
//結果の出力
print_r($array);
/*結果
Array
(
[0] => ソムリエ
[1] => 鳶職
[2] => YouTuber
[3] => 2.5次元俳優
[4] => ハイパーメディアクリエイター
[5] => 傭兵
)
*/
連想配列の場合
連想配列を結合した場合、同じキーの値は後から追加した配列で上書きされます。
//配列の準備
$array1 = array('名前' => 'マチルダ', '年齢' => 36, '職業' => '傭兵');
$array2 = array('名前' => '権蔵', '年齢' => 69, '職業' => '鳶職');
$array3 = array('名前' => '光宙');
//結合
$array = array_merge($array1, $array2, $array3);
//結果の出力
print_r($array);
/*結果
Array
(
[名前] => 光宙
[年齢] => 69
[職業] => 鳶職
)
*/
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
array_merge_recursive関数の使い方
配列を再帰的に結合する関数です。再帰的ってなんじゃおんどりゃ解るように説明しさらせやクソボケがと思いましたよね。私もそう思いました(育ちが悪い)。次の例を見ていただけば解ると思います。
添字配列の場合
添字配列を結合した場合の挙動はarray_merge
とまったく同じです。
//配列の準備
$array1 = array('ソムリエ', '鳶職', 'YouTuber');
$array2 = array('2.5次元俳優', 'ハイパーメディアクリエイター', '傭兵');
//結合
$array = array_merge_recursive($array1, $array2);
//結果の出力
print_r($array);
/*結果
Array
(
[0] => ソムリエ
[1] => 鳶職
[2] => YouTuber
[3] => 2.5次元俳優
[4] => ハイパーメディアクリエイター
[5] => 傭兵
)
*/
連想配列の場合
連想配列を結合した場合、同じキーの値は上書きされずに、そのキーの下に配列として追加されていきます。
//配列の準備
$array1 = array('名前' => 'マチルダ', '年齢' => 36, '職業' => '傭兵');
$array2 = array('名前' => '権蔵', '年齢' => 69, '職業' => '鳶職');
$array3 = array('名前' => '光宙');
//結合
$array = array_merge_recursive($array1, $array2, $array3);
//結果の出力
print_r($array);
/*結果
Array
(
[名前] => Array
(
[0] => マチルダ
[1] => 権蔵
[2] => 光宙
)
[年齢] => Array
(
[0] => 36
[1] => 69
)
[職業] => Array
(
[0] => 傭兵
[1] => 鳶職
)
)
*/
配列結合演算子の使い方
配列結合演算子+
を使った場合は、添字配列か連想配列かに関わらず同じ動作をします。同じキーが存在する場合は、先にある配列が優先されます。
//配列の準備
$array1 = array('ソムリエ', '鳶職', 'YouTuber');
$array2 = array('2.5次元俳優', 'ハイパーメディアクリエイター', '傭兵');
//結合
$array = $array1 + $array2;
//結果の出力
print_r($array);
/*結果
Array
(
[0] => ソムリエ
[1] => 鳶職
[2] => YouTuber
)
*/
//配列の準備
$array1 = array('名前' => 'マチルダ', '年齢' => 36, '職業' => '傭兵');
$array2 = array('名前' => '権蔵', '年齢' => 69, '職業' => '鳶職');
//結合
$array = $array1 + $array2;
//結果の出力
print_r($array);
/*結果
Array
(
[名前] => マチルダ
[年齢] => 36
[職業] => 傭兵
)
*/
キーが異なっていれば足した順番通りに結合されます。ただし、添字配列であってもキーの振り直しはされません。
//配列の準備
$array1 = array(0 => 'ソムリエ', 1 => '鳶職', 2 => 'YouTuber');
$array2 = array(7 => '2.5次元俳優', 8 => 'ハイパーメディアクリエイター', 9 => '傭兵');
$array3 = array(3 => 'インフルエンサー');
//結合
$array = $array1 + $array2 + $array3;
//結果の出力
echo '<pre>';
print_r($array);
echo '</pre>';
/*結果
Array
(
[0] => ソムリエ
[1] => 鳶職
[2] => YouTuber
[7] => 2.5次元俳優
[8] => ハイパーメディアクリエイター
[9] => 傭兵
[3] => インフルエンサー
)
*/
3つの方法の比較
結合の方法 | 添字配列 | 連想配列 |
---|---|---|
array_merge | キーが重複していてもすべての値が残る 結合後のキーは振り直される | キーが重複していれば後ろの配列の値が優先される |
array_merge_recursive | キーが重複していてもすべての値が残る 結合後のキーは振り直される | キーが重複していてもすべての値が配列で残る |
+ | キーが重複していれば前の配列の値が優先される 結合後のキーは振り直されない | キーが重複していれば前の配列の値が優先される |
さいごに
配列を結合する方法について解説しましたが、なかなかややこしいですよね。こんなん覚えるの無理ですよね。覚えなくていいんです。その都度調べましょう。
でわでわ
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
コメント