【PHP入門】配列への追加(array_push、array_unshift、array_merge)

PHPでは、配列を使用してさまざまな処理が可能です。

この記事では、

・array_push関数で配列を追加する方法
・ +演算子で配列を追加する方法
・ [](角カッコ)で配列を追加する方法

という基本的な内容から、

・array_unshift関数で先頭に要素を追加する方法
・array_merge関数で配列をマージする方法
・array_push関数と[](角カッコ)の速度検証

などの応用的な使い方に関しても解説していきます。

今回はそんな配列に要素を追加する方法ついて、わかりやすく解説します!

配列の最後に要素を追加する

ここではarray_push関数や+演算子[](角カッコ)を使用して、配列の最後に要素を追加する方法を解説します。

array_push関数とは

1つ以上の要素を配列の最後に追加したい場合には、array_push関数を使用します。

array_push関数は、渡された変数を配列の最後に追加します。

書き方:

int array_push($配列名, $値1 [, 値2 $...])

引数:
第一引数に追加する対象の配列を指定します。
第一引数以降には配列に追加する値を1つまたは複数指定します。

返り値:
追加した後の配列の要素数を返します。

注意点:
配列に追加する要素が1つのみの場合は、関数を呼び出す際のオーバーヘッドが発生しない$array[] = を使用することをオススメします。

array_push関数の使い方

以下にarray_push関数を使用して、配列に複数の要素を追加する方法を記述します。

array_push関数の基本的な使い方


サンプルプログラム

$fruits = ['apple', 'orange', 'melon'];

//array_pushを使用して要素を追加する
array_push($fruits, 'banana', 'pineapple');

print_r($fruits);

実行結果:

Array
(
    [0] => apple
    [1] => orange
    [2] => melon
    [3] => banana
    [4] => pineapple
)

サンプルでは配列$fruitsに対して、array_push関数を使用して文字列'banana', 'pineapple’を追加しています。

実行結果を確認すると、配列にarray_push関数で指定した文字列が追加されていることがわかりますね!

array_push関数で連想配列に値を追加する

キーと値がペアで設定されている多次元配列や連想配列では、array_push関数を使用して要素を追加しようとしても、配列に値を追加してくれません。

array_push($fruits, 'banana', 'pineapple’);

上のように要素を追加しても、配列$fruitsには値は追加されません。

多次元配列や連想配列に要素を追加する方法はいくつかありますが、array_push関数を使用する場合は、配列をキーと値の1次元配列に分離する必要があります。

値とキーの配列にそれぞれ要素を追加したあとに配列を結合して多次元配列を作成します。

以下に連想配列をarray_push関数を使用して、値を追加する方法を記述します。

サンプルプログラム

$fruits = [0=>'apple', 1=>'orange', 2=>'pineapple'];

//連想配列をキーと値1次元配列に分解する
foreach($fruits as $key => $value){
  $fruits_key[] = $key;
  $fruits_val[] = $value;
}

//キーと値の配列それぞれに値を追加する
array_push($fruits_key, 3, 4);
array_push($fruits_val, 'banana', 'pineapple');

//array_combineでキーと値の配列をマージする
$fruits = array_combine($fruits_key, $fruits_val);

print_r($fruits);

実行結果:

Array
(
    [0] => apple
    [1] => orange
    [2] => pineapple
    [3] => banana
    [4] => pineapple
)

サンプルでは連想配列をforeach文のループでキーと値を取り出し、キーと値をそれぞれ1次元配列に格納しています。

キーと値の1次元配列にそれぞれarray_push関数で値を追加したあとに、array_combine関数を使用して配列を結合しています。

実行結果のとおり結合した連想配列にはキーと値が、それぞれ追加されていることがわかります。

+演算子で追加する

+演算子を使用することでも配列を結合することが可能です。

以下に+演算子を使用して配列を結合するサンプルを紹介します。

サンプルプログラム

$fruits1 = [
      'item1' => 'apple',
      'item2' => 'orange',
      'item3' => 'melon'
      ];

$fruits2 = [
     'item4' => 'pineapple',
     'item5' => 'banana'];

//配列を+演算子で結合する
$fruits_merge = $fruits1 + $fruits2;

print_r($fruits_merge);

実行結果:

Array
(
    [item1] => apple
    [item2] => orange
    [item3] => melon
    [item4] => pineapple
    [item5] => banana
)

このように+演算子でも配列を結合できることがわかりますね!

+演算子で結合する場合の注意点として、追加する対象の配列のキーが重複している場合は上書きされません。

[](角カッコ)で追加する

配列の要素を1つだけ追加する場合は、[](角カッコ)を使用することでも追加は可能です。

サンプルプログラム

$fruits = [
      'item1' => 'apple',
      'item2' => 'orange',
      'item3' => 'melon'
      ];

//[]で配列を1つずつ追加する
$fruits['item4'] = 'pineapple';
$fruits['item5'] = 'banana';

print_r($fruits);

実行結果:

Array
(
    [item1] => apple
    [item2] => orange
    [item3] => melon
    [item4] => pineapple
    [item5] => banana
)

配列の最初に要素を追加する

array_unshift関数とは

配列の先頭に要素を追加するにはarray_unshift関数を使用します。

書き方:

int array_unshift($配列, $値1(, $値2, $…))

引数:
第一引数には対象の配列を指定します。
第一引数以降には追加する値を1つまたは複数指定します。

返り値:
追加した後の配列の要素数を返します。

array_unshift関数の使い方

以下にarray_unshift関数を使用して、配列の先頭に値を追加するサンプルを紹介します。

サンプルプログラム

$fruits = ['apple', 'orange', 'melon'];
array_unshift($fruits, 'banana', 'pineapple');

print_r($fruits);

実行結果:

Array
(
    [0] => banana
    [1] => pineapple
    [2] => apple
    [3] => orange
    [4] => melon
)

配列の先頭の要素を取得する方法は、以下のサイトにまとめていますのでぜひ参考にしてください!

配列をマージする方法

array_merge関数とは

配列の要素の最後にひとつまたは複数の配列を結合するときは、array_merge関数を使用します。

書き方:

array array_merge ( array $配列 [, 追加する配列 $... ] )

引数:
第一引数には対象の配列を指定します。
第一引数以降の引数では追加する配列を1つまたは複数指定します。

返り値:
対象の配列の最後に配列を追加することにより、ひとつまたは複数の配列をマージし、マージした結果の配列を返します。

array_merge関数の使い方

以下にarray_merge関数を使用して、配列をマージするサンプルを紹介します。

サンプルプログラム

$items1 = ['item1', 'item2', 'item3'];
$items2 = ['item4', 'item5'];
$items3 = ['item6', 'item7'];

//配列を結合する
$item_merge = array_merge($items1, $items2, $items3);

print_r($item_merge);

実行結果:

Array
(
    [0] => item1
    [1] => item2
    [2] => item3
    [3] => item4
    [4] => item5
    [5] => item6
    [6] => item7
)

サンプルプログラムでは、array_merge関数を使用して、配列$item1の後ろに$item2と$item3を指定しています。

実行結果のとおり指定した配列が結合されていることがわかりますね!

array_merge関数のさまざまな使い方については、以下の記事でも詳しく解説していますのでぜひ参考にしてくださいね!

速度面

配列の操作は、プログラムのさまざまな用途で使用する非常に重要な処理と言えます。

ここでは、配列に要素を追加するarray_push関数と[](角カッコ)で、ぞれぞれ配列の最後に値を追加したときの処理パフォーマンスを比較してみました。

比較にはmicrotime関数を使用し、それぞれループの中で1000000回配列に値を追加しています。

//array_pushで値を追加する
$value1 = [];
$start1 = microtime(true);
for ($i = 0 ; $i < 1000000 ; $i++){
  array_push($value1, $i);
}
$end1 = microtime(true) - $start1;

echo 'array_push : '.$end1 .'秒';
echo '<br>';

//[](角括弧)で値を追加する
$value2 = [];
$start2 = microtime(true);
for ($j = 0 ; $j < 1000000 ; $j++){
  $value2[] = $j;
}
$end2 = microtime(true) - $start2;

echo '[] : '.$end2 .'秒';

実行結果:

実行結果:1回目
array_push : 0.249271869659秒
[] : 0.109919071198秒
実行結果:2回目
array_push : 0.24839091301秒
[] : 0.102676153183秒
実行結果:3回目
array_push : 0.247305870056秒
[] : 0.106796979904秒

実行結果のとおり、[](角括弧)を使用した追加のほうがarray_push関数を使用するより、倍の速度で値を追加できることがわかりました。

これは、array_push関数はループで関数を呼出しているため、その分オーバーヘッドが発生して処理が遅くなるためです。

まとめ

ここでは配列を結合する方法として、

・array_push関数で配列を追加する方法
・ +演算子で配列を追加する方法
・ [](角カッコ)で配列を追加する方法
・array_unshift関数で先頭に要素を追加する方法
・array_merge関数で配列をマージする方法
・array_push関数と[](角カッコ)の速度検証

などについて解説しました。

配列を扱った処理は、実際の開発でもよく使用しますので、この機会にぜひ覚えておきましょう。

もし、array_push関数の使用方法を忘れてしまったら、この記事を思い出してくださいね!

プログラミング学習を効率良く進めたいなら…

学習を始めたけどエラーが解決できない
作りたいものはあるけど、何から始めればいいかわからない
プログラミングに対して、このような悩みを持っている方も多いですよね。

そんな方には、弊社が運営するサブスク型のプログラミングスクール「SAMURAI ENGINEER Plus+がおすすめです。



月額2980円(税別)で、主に4つのサービスを提供させていただきます。

  • 現役エンジニアによる月1度の「マンツーマン指導」
  • 平均回答時間30分の「Q&Aサービス」
  • 作りながら学べる28種類の「教材」
  • 学習を記録&仲間と共有できる「学習ログ」

目的にあった教材を選べば、どなたでも効率よく学習できるほか、Q&Aサービスやマンツーマン指導を活用することで、挫折せずにプログラミングの習得が可能です。

プログラミングを効率的に学びたい人はもちろん、何から始めたらよいのかわからない方は、ぜひ「SAMURAI ENGINEER Plus+」をご利用ください。
まずは30日無料体験

書いた人

侍テック編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら