PHPでWebアプリケーションやシステムを開発していると、配列に動的に要素を追加したい場面は頻繁に出てきます。データベースから取得した結果を積み上げる、フォームの入力値をまとめる、APIレスポンスを整形するなど、配列操作はPHPプログラミングの根幹をなす技術です。
しかし「array_pushとarray_mergeはどう違うのか」「連想配列に要素を追加するとキーはどうなるのか」「元の配列を意図せず書き換えてしまった」という悩みを持つ方も多いのではないでしょうか。
本記事では、PHPの配列に要素を追加する方法を基本から応用まで体系的に解説します。array_pushとarray_mergeの違い、使い分けの基準、よくある注意点、実践的なコード例まで、初心者の方でもすぐに活用できる内容でまとめています。
PHPで配列を扱う基礎
配列の種類と基本構造
PHPの配列には主に以下の3種類があります。
| 種類 | 特徴 | 例 |
|---|---|---|
| インデックス配列 | 0から始まる数値キー | ['apple', 'banana', 'cherry'] |
| 連想配列 | 任意の文字列キー | ['name' => 'Taro', 'age' => 25] |
| 多次元配列 | 配列の中に配列を持つ | [['id' => 1], ['id' => 2]] |
配列の基本的な作り方は以下のとおりです。
// インデックス配列
$fruits = ['apple', 'banana', 'cherry'];
// 連想配列
$user = ['name' => 'Taro', 'age' => 25];
// 空の配列(後から要素を追加する場合)
$items = [];
配列を使うメリット
複数の値をまとめて管理できる
関連する複数のデータを1つの変数にまとめて格納できるため、変数の数を減らしてコードをシンプルに保てます。10個の商品名を扱う場合、変数10個を用意する代わりに1つの配列で管理できます。
ループ処理やデータ操作が簡単になる
配列はforeachやforループと組み合わせることで、要素数に関わらず同じ処理を一括適用できます。データの取得・変換・出力など、繰り返し処理が必要な場面でその威力を発揮します。
array_pushを使った配列への要素追加
array_pushの基本構文
array_push()は配列の末尾に1つ以上の要素を追加する関数です。
array_push(配列, 追加する値1, 追加する値2, ...);
array_pushは元の配列を直接変更します。関数の戻り値は追加後の配列の要素数(整数)であり、変更された配列そのものではありません。この点は後述するarray_mergeとの重要な違いです。
単一要素を追加する例
$fruits = ['apple', 'banana'];
array_push($fruits, 'cherry');
print_r($fruits);
// 出力:Array ( [0] => apple [1] => banana [2] => cherry )
なお、単一の要素を追加する場合はarray_pushを使わずに以下の短縮構文でも同じ結果が得られます。
$fruits[] = 'cherry';
短縮構文の方がシンプルで処理速度もわずかに速いため、単一要素の追加には$array[] = $valueの形式を使うことが多いです。
複数要素を追加する例
$fruits = ['apple', 'banana'];
array_push($fruits, 'cherry', 'grape', 'melon');
print_r($fruits);
// 出力:Array ( [0] => apple [1] => banana [2] => cherry [3] => grape [4] => melon )
既存配列に順番に要素を追加
追加された要素はインデックス配列の場合、既存の最大インデックスの続き番号が自動的に割り当てられます。インデックスが飛び番になることはありません。
戻り値の扱い方
array_pushの戻り値は追加後の配列の要素数です。変更された配列を使うには、引数として渡した変数($fruits)を参照します。
$fruits = ['apple', 'banana'];
fruits, 'cherry');
echo $count; // 出力:3(要素数)
print_r($fruits); // 変更済みの配列が確認できる
array_mergeを使った配列結合
array_mergeの基本構文
array_merge()は複数の配列を結合して新しい配列として返す関数です。
$new_array = array_merge(配列1, 配列2, ...);
array_pushとの最大の違いは、元の配列を変更せず、結合結果を新しい配列として返す点です。
複数配列をまとめる方法
$fruits1 = ['apple', 'banana'];
$fruits2 = ['cherry', 'grape'];
fruits1, $fruits2);
print_r($all_fruits);
// 出力:Array ( [0] => apple [1] => banana [2] => cherry [3] => grape )
3つ以上の配列もまとめて結合できます。
$a = ['red'];
$b = ['green'];
$c = ['blue'];
a, $b, $c);
// 出力:Array ( [0] => red [1] => green [2] => blue )
元の配列が変更されない点の注意
新しい配列として返される仕組み
array_mergeは引数として渡した配列には一切変更を加えません。結合結果を使うには戻り値を変数に代入する必要があります。
$a = ['apple'];
$b = ['banana'];
array_merge($a, $b); // 戻り値を受け取らないと結合結果は消える
a, $b); // 正しい使い方
print_r($merged);
連想配列の場合の挙動
連想配列をarray_mergeで結合する場合、同じ文字列キーが存在すると後の配列の値で上書きされます。インデックス配列(数値キー)の場合は上書きされず、キーが振り直されて末尾に追加されます。
// 連想配列:同じキーは後の値で上書き
$user1 = ['name' => 'Taro', 'age' => 25];
$user2 = ['name' => 'Hanako', 'email' => '[email protected]'];
user1, $user2);
print_r($merged);
// 出力:Array ( [name] => Hanako Date not entered => 25 [email] => [email protected] )
// nameはHanakoで上書きされる
配列追加の実践例
文字列の追加例
// array_pushで文字列を追加
$tags = ['PHP', 'Web'];
array_push($tags, 'Backend', 'Server');
print_r($tags);
// 出力:Array ( [0] => PHP [1] => Web [2] => Backend [3] => Server )
数値配列の追加例
// スコアリストに新しいスコアを追加
$scores = [85, 92, 78];
array_push($scores, 95, 88);
print_r($scores);
// 出力:Array ( [0] => 85 [1] => 92 [2] => 78 [3] => 95 [4] => 88 )
連想配列の追加例
キーを意識した追加方法
連想配列にキーを指定して要素を追加するには、直接キーを指定して代入します。array_pushは連想配列への名前付きキーの追加には使えないため、以下の方法を使います。
$user = ['name' => 'Taro', 'age' => 25];
// キーを指定して新しい要素を追加
$user['email'] = '[email protected]';
$user['role'] = 'admin';
print_r($user);
// 出力:Array ( [name] => Taro Date not entered => 25 [email] => [email protected] [role] => admin )
既存キーの上書きに注意
連想配列で既存のキーに代入すると値が上書きされます。新規追加なのか上書きなのかを区別したい場合はisset()やarray_key_exists()で事前にキーの存在を確認します。
$user = ['name' => 'Taro', 'age' => 25];
// キーが存在しない場合だけ追加
if (!isset($user['email'])) {
$user['email'] = '[email protected]';
}
PHPの配列操作の詳しい解説については、侍エンジニア「PHPの配列操作完全ガイド」も参考になります。
配列追加でよくある注意点
配列の型を揃える
PHPは動的型付け言語のため、異なる型の値を同じ配列に混在させることができます。しかしループ処理や計算を行う場合、型の混在は予期しないエラーやバグの原因になります。
// 型が混在した配列(注意が必要)
$mixed = [1, 'two', 3.0, true];
// 合計を計算する場合に問題が起きやすい
mixed); // 文字列は0として扱われる
データを追加する際は、追加する値の型が配列内の他の要素と一致しているかを意識しましょう。
元の配列を意図せず上書きしない
array_pushは元の配列を直接変更するため、元のデータを保持したまま別の配列を作りたい場合には使えません。そのような場合はarray_mergeを使って新しい配列を作ります。
$original = ['apple', 'banana'];
// 元の配列を保持しながら新しい配列を作る
original, ['cherry']);
// $originalは変更されていない
print_r($original); // apple, banana
print_r($new); // apple, banana, cherry
戻り値を活用して新しい配列を作成する
array_pushとarray_mergeの使い分け
| 用途 | 推奨する方法 |
|---|---|
| 単一要素の末尾追加 | $array[] = $value |
| 複数要素の末尾追加 | array_push($array, $val1, $val2) |
| 複数配列の結合(元配列保持) | array_merge($array1, $array2) |
| 連想配列にキー指定で追加 | $array['key'] = $value |
効率的な配列操作のコツ
ループ内で大量の要素を追加する場合は、array_pushよりも$array[] = $valueの短縮構文の方がパフォーマンス面で優れています。また、事前に配列のサイズが分かる場合はarray_fillで配列を初期化してから代入する方法も効率的です。
配列追加を使った応用テクニック
ループ内での動的追加
データベースの取得結果やAPIレスポンスをループで処理し、条件を満たすものだけを配列に積み上げる実践的なパターンです。
$products = [
['name' => 'Apple', 'price' => 150],
['name' => 'Banana', 'price' => 80],
['name' => 'Cherry', 'price' => 300],
['name' => 'Grape', 'price' => 500],
];
// 200円以上の商品だけを抽出して新しい配列に追加
$expensive = [];
foreach ($products as $product) {
if ($product['price'] >= 200) {
$expensive[] = $product;
}
}
print_r($expensive);
// Cherry と Grape が格納された配列が出力される
フォームデータやAPI結果を配列に追加
フォームから送信された複数のチェックボックスの値を配列にまとめる例です。
// フォームから送信されたデータを配列に追加
$selected_items = [];
// $_POST['items'] がチェックされた項目の配列として送信される場合
if (isset(_POST['items']) && is_array(
_POST['items'])) {
foreach ($_POST['items'] as $item) {
// バリデーション処理を挟んでから追加
if (!empty($item)) {
item);
}
}
}
APIレスポンスをJSONからデコードして配列に追加する例です。
// APIレスポンスをデコードして配列に追加
$all_results = [];
$api_response = '{"items": ["data1", "data2", "data3"]}';
api_response, true);
if (isset($decoded['items'])) {
all_results, $decoded['items']);
}
print_r($all_results);
// 出力:Array ( [0] => data1 [1] => data2 [2] => data3 )
多次元配列の構築
ユーザーリストのような多次元配列を動的に構築する例です。
$users = [];
// ユーザーデータを順次追加
$users[] = ['id' => 1, 'name' => 'Taro', 'role' => 'admin'];
$users[] = ['id' => 2, 'name' => 'Hanako', 'role' => 'editor'];
$users[] = ['id' => 3, 'name' => 'Jiro', 'role' => 'viewer'];
// 特定のユーザーにネストしたデータを追加
$users[0]['permissions'] = ['read', 'write', 'delete'];
print_r($users);
配列のネストを活かしたデータ管理
多次元配列を使うことで、JSONに近い構造のデータをPHP内で管理できます。データベースから取得した関連テーブルのデータをネスト構造で組み立てたり、APIに送信するペイロードを動的に構築したりする場面で多用されます。
配列結合と追加の組み合わせ
// 複数のソースからデータを集約する例
$local_data = ['item1', 'item2'];
$remote_data = ['item3', 'item4'];
$extra_item = 'item5';
// まずarray_mergeで2つの配列を結合
local_data, $remote_data);
// さらに単一要素を追加
$combined[] = $extra_item;
print_r($combined);
// 出力:Array ( [0] => item1 [1] => item2 [2] => item3 [3] => item4 [4] => item5 )
PHPの配列追加に関するさらに詳しい情報は、Webukatu「PHPのarray_pushとarray_mergeの違いと使い分け」、TechPlay「PHPの配列操作を完全理解する」、FlatFlag「array_pushの使い方と注意点」も参考にしてください。
PHPをはじめとするプログラミングの実践的な解説は、kakiro-web.comでも幅広く公開しています。
まとめ
PHPで配列に要素を追加する基本はarray_pushとarray_merge
PHPで配列に要素を追加する方法は複数あります。最もよく使われるのがarray_pushとarray_merge、および短縮構文の$array[] = $valueです。それぞれ動作が異なるため、用途に応じた使い分けが重要です。
単一要素や複数要素、複数配列の結合を使い分ける
単一要素の追加には$array[] = $valueが最もシンプルで効率的です。複数要素を一度に追加するならarray_push、複数の配列を結合して新しい配列を作るならarray_mergeを使います。連想配列へのキー指定追加は$array['key'] = $valueが基本です。
元配列を意図せず上書きしないよう注意して活用
array_pushは元の配列を直接変更し、array_mergeは新しい配列を返す——この違いを常に意識することが、意図しないデータ破壊を防ぐ基本です。元のデータを保持したまま操作したい場合はarray_mergeを選択し、戻り値を新しい変数に代入しましょう。
- 単一要素の追加:
$array[] = $valueが最速でシンプル - 複数要素の一括追加:
array_push($array, $val1, $val2) - 複数配列の結合:
$new = array_merge($array1, $array2) - 連想配列へのキー指定追加:
$array['key'] = $value array_pushは元の配列を直接変更するarray_mergeは元の配列を変更せず新しい配列を返す- 連想配列の
array_mergeでは同一キーは後の値で上書きされる

