menu
ホーム > PHPの文法 > 10 配列 > PHPの配列をマスターしよう!【基本から初心者向け】
UPDATE:2018年06月30日

PHPの配列をマスターしよう!【基本から初心者向け】

PHPリファレンス

PHP5 PHP7

目次


配列とは

この節では配列の概要を大まかに説明していきますので、配列のイメージを掴んでみましょう。

POINT

  • 配列は複数の値をまとめたもの
  • 配列はデータを「キー」のペアにしている
  • 「キー/値」のペアになっているデータを配列の要素と言う
  • 配列には順序があり要素が追加された順に並んでいる
  • 配列にはすべてのデータ型の値を格納することが出来る

早速 配列を作って出力してみましょう!

PHP では、array()関数 や「 [・・・] (角括弧) 」を利用して配列を作成することができます。

実行結果
そば
ラーメン
うどん

そば
ラーメン
うどん

リンゴ
バナナ
オレンジ

リンゴ
バナナ
オレンジ

こんな感じです! 配列 では、 array()関数 や「 [・・・] (角括弧) 」を利用して複数の値を扱います。それでは詳しい説明を進めていきます。

配列とは

配列はPHPのデータ型の1つ

配列とはPHPで扱うデータ型の1つで、複数の値をまとめたものです。(PHPのデータ型は、文字列型(string)、整数型(integer)、浮動小数点数型(float)、論理型(boolean)、配列型(array)、オブジェクト型(object)、リソース型(resource)、NULL(null)などがあります。)配列は配列型の変数、配列変数のことです。

配列はキー/値のペアで要素を扱う

配列はデータを「キー/値」のようにペアにして順序付きで管理します。キーは値に付けられた名前のようなものです。値は値そのものです。この「キー/値」のペアになっているデータを配列の要素と言います。配列には順序があり、要素が追加された順に並びます。

配列(配列型変数)は複数の値を扱う

配列(配列型変数)は複数の値 を扱う

プログラム上の容器である変数は全てのデータ型を扱えますが、「文字列」や「数値」などを変数に代入した場合、1つの値しか扱えません。つまり、文字列型や整数型、浮動小数点型、論理型などの変数では、格納されている値は1つです。ですが、配列型を利用することで複数の値を扱うことが出来ます。変数についてはこちらを参照下さい。

実行結果
string(9) "文字列"
int(100)
bool(true)
array(3) { [0]=> string(6) "日本" [1]=> string(12) "アメリカ" [2]=> string(12) "イギリス" }

実行結果を見てみると、配列(配列型の変数)$array には複数の値が格納されていることが分かります。var_dump()関数は、変数を展開して内容を確認する関数です。因みに格納されている値のデータ型も表示されていますね。文字列型はstring、整数型はint、配列型はarrayと表示されています。

配列の扱う値のデータ型

配列はすべてのデータ型を扱える

配列には様々なデータ型の値を格納することが出来ます。次のコードでは、配列に、文字列型(string)、整数型(integer)、浮動小数点数型(float)、論理型(boolean)、配列型(array)、オブジェクト型(object)、リソース型(resource)、NULL(null)の値を格納しています。var_dump()で配列の内容を確認すると、格納されている各要素のキー名、値、データ型が表示されます。以降で詳しく説明しますが、配列に配列を格納して入れ子構造(ネスト)にすることが出来ます。このような配列を2次元配列や3次元配列、または多次元配列などと言います。

実行結果
array(8) {
 [0]=>
 string(9) "文字列"
 [1]=>
 int(10)
 [2]=>
 float(0.15)
 [3]=>
 bool(true)
 [4]=>
 array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
 }
 [5]=>
 object(test)#1 (0) {
 }
 [6]=>
 bool(false)
 [7]=>
 NULL
}

PHPでは配列に対して、要素の追加や削除、並び替え、検索、など、様々な操作が行えます!配列はプログラミング上必ず必要になる機能です。本ページでは、配列の宣言、作成、表示、操作、など多くの機能をご紹介いたします。


配列の種類 インデックス配列 と 連想配列

POINT

  • インデックス配列(キーは0からの数値)
  • 連想配列(キーは任意の文字列)

PHPには2種類の配列があります。 インデックス配列連想配列 です。

インデックス配列の「キー」は 0 から付与される整数値です。連想配列の「キー」は任意の文字列です。

インデックス配列と連想配列の違いは「キー」が整数値か文字列かの違いだけです。PHPの内部ではすべての配列を連想配列として管理しています。


配列の宣言(作成)と値の格納

POINT

  • 配列の初期化 $array = array();
  • [・・・] (角括弧) 」 で配列を作成
  • array() 関数 で配列を作成
  • 文字列の「キー」はクォートする
  • 変数の「キー」はクォートする
  • 負の値のキー $number[-8] = -8;

配列を作成するには、「 [・・・] (角括弧) 」を使用する場合とarray()関数を使用する場合があります。


(1) 配列の初期化

配列の初期化は

とします。array() で配列を初期化できます。初期化された変数 $array は、変数名が array でデータ型が配列型の配列変数となります。要素数が 0 で、空の状態です。配列の入れ物です。このarray()は、配列を作成する際にも使用します。
var_dump()で配列 $array の内容を確認すると

array(0) と表示されます。配列型で要素が0個という意味です。


(2) 「 [・・・] (角括弧) 」を使用した配列の作成と値の格納

最初に配列を扱う変数=配列変数の名前を指定します。配列を初期化しなくても配列を作成することは出来るのですが、初期化してから配列を作成します。

配列要素の「キー」を「 [・・・] (角括弧) 」で囲みます「 [キー] 」。この場合整数値 0 がキーです。

代入演算子「 = 」を使用して配列に値を格納します。

配列変数「$countries」には要素が1つあり、その要素のキーは「0」で値は「アイスランド共和国」となります。

出力する際は、echo や print で、配列変数名とキー名を指定します。

実行結果
アイスランド共和国
アイスランド共和国


(3) 「 [・・・] (角括弧) 」でインデックス配列を作成

[・・・] (角括弧) 」を使用してキーを整数値 0 から付与するインデックス配列を作成します。キーは整数値で指定します。出力する際もキーを整数値で指定します。

以下のようにキーの整数値を指定せず、「 [・・・] (角括弧) 」を空の状態で記述しても、要素は順次追加されていきます。キーの整数値は 0 から始まります。


(4) 「 [・・・] (角括弧) 」で連想配列を作成

[・・・] (角括弧) 」を使用してキーを文字列とする連想配列を作成します。キーである文字列はクォートで囲みます。クォートは、「"(ダブルクォート)」、「'(シングルクォーテーション)」のどちらでも大丈夫です。出力する際も文字列キーをクォートで囲みます。

キー名を変数で指定することも可能です。キー名の変数は「"(ダブルクォート)」で囲み、変数展開させます。出力する際もキーの変数をクォートで囲み指定します。


(5) array()関数でインデックス配列を作成

array()関数を使用してインデックス配列を作成することが出来ます。要素間は「, (カンマ)」で区切ります。array()を使用すると、複数の要素を一括で格納できます。

実行結果
array(3) { [0]=> string(27) "アイスランド共和国" [1]=> string(18) "アイルランド" [2]=> string(33) "アゼルバイジャン共和国" }
アイルランド
array(3) { [0]=> string(27) "アイスランド共和国" [1]=> string(18) "アイルランド" [2]=> string(33) "アゼルバイジャン共和国" }
アイルランド

結果は同じです。array()関数で配列を作成する際、値だけを指定すると、自動でキーを整数値 0 から順次付与するインデックス配列になります。


(6) array()関数で連想配列を作成

array()関数を使用して連想配列を作成することが出来ます。「=>」記号を使用して「キー => 値」の要素を作成します。要素間は「, (カンマ)」で区切ります。

実行結果
array(2) { ["suzuki"]=> string(15) "suzuki@mail.com" ["yamada"]=> string(15) "yamada@mail.com" }
array(2) { ["suzuki"]=> string(15) "suzuki@mail.com" ["yamada"]=> string(15) "yamada@mail.com" }

結果は同じです。

array()関数を使用した連想配列の作成でも、キー名に変数を指定することができます。キー名の変数は「"(ダブルクォート)」で囲み、変数展開させます。

実行結果
array(2) { ["suzuki"]=> string(15) "suzuki@mail.com" ["yamada"]=> string(15) "yamada@mail.com" }
array(2) { ["suzuki"]=> string(15) "suzuki@mail.com" ["yamada"]=> string(15) "yamada@mail.com" }


(7) array()関数で連想配列を作成 キーを省略

array()関数を使用してキーを省略します。最初のキーだけ「=>」記号を使用して指定し、以降は省略します。値へのキーは自動的に付与されます。

実行結果
array(5) { [1]=> string(3) "one" [2]=> string(3) "two" [3]=> string(5) "three" [4]=> string(4) "four" [5]=> string(4) "five" }


(8) 配列の値の追加

[ ・・・ ] (角括弧) 」を使用して配列末尾に値を追加することが出来ます。この方法はインデックス配列(キーが整数値)で使用します。追加されるとキーには数値が自動的に付与されます。数値インデックスを 0 から順番に進み最初に見つかった空き番号に要素を追加します。

実行結果
shida


(9) 配列の値の上書き

同じキーの配列に値を代入すると値が上書きされます。

実行結果
suzuki
KnjiSuzuki@mail.com


(10) 負の値のキー

インデックス配列のキーに負の値を設定できます。

実行結果
-8


配列へのアクセス(表示)

配列作成時にも説明しましたが、配列を出力する際は、echo や print で配列変数とキー名を指定します。

POINT

  • 文字列の「キー」はクォートする
  • 変数の「キー」はクォートする


配列の値にアクセス

作成した配列の値を echo で表示させます。配列変数とキー名を指定します。インデックス配列の場合は、整数値のキーを指定し、連想配列の場合は、キーの文字列を指定します。連想配列のキーである文字列はクォートで囲みます。クォートは、「"(ダブルクォート)」、「'(シングルクォーテーション)」のどちらでも大丈夫です。

実行結果
アゼルバイジャン共和国
sato@mail.com


文字列の「キー」はクォートする

連想配列の文字列のキー名はクォートを使用するようにしましょう。そうすることで定数と見分けが付くようになります。

実行結果
定数がキー名
文字列がキー名


配列のキーを変数にする場合はクォートする

配列の作成時もそうでしたが、配列を出力する際、配列のキー名に変数を指定できます。指定する場合、変数のキー名をクォートして下さい。キー名の変数は「"(ダブルクォート)」で囲み、変数展開させます。

実行結果
変数がキー名


多次元配列

PHPの配列は、配列の中に配列を格納して入れ子構造(ネスト)にすることが可能です。このような配列を2次元配列(2階層)や3次元配列(3階層)、または多次元配列などと言います。


「 [ ](角括弧) 」で多次元配列を作成する

「 [ ](角括弧) 」を[][][]と連ねることで、多次元配列を作成することが可能です。

実行結果
suzuki
suzuki@mail.com
saitou
saitou@mail.com
tanaka
tanaka@mail.com

配列のキー名は値へアクセスする際の住所のようなものです。複雑な多次元配列でも最後に取り出す値は1つです。
例えば

実行結果
arai

配列へのアクセスを日本語にすると、$schoolchild という配列の
[6年][1組][男の子][3番][番号]は 3
[6年][1組][男の子][3番][名前]は arai
[6年][1組][男の子][3番][メール]は arai@mail.com
というふうに考えます。


多次元配列のインデックス配列をarray()で作成する

array()を入れ子にすることで多次元配列を作成できます。

実行結果





入れ子用の配列変数を事前に作成して多次元配列を作成します。上記の例と内容は同じです。

実行結果






多次元配列の連想配列をarray()で作成する

実行結果





後述する foreach文 でも説明しますが、要素数が多く階層化されている配列変数は foreach文 で展開すると便利です。

実行結果
■recodeA
 【 first 】:あ
 【 second 】:い
 【 third 】:う
 【 forth 】:え
 【 fifth 】:お
■recodeK
 【 first 】:か
 【 second 】:き
 【 third 】:く
 【 forth 】:け
 【 fifth 】:こ
■recodeS
 【 first 】:さ
 【 second 】:し
 【 third 】:す
 【 forth 】:せ
 【 fifth 】:そ


配列操作


配列の大きさを取得

実行結果
3


範囲を指定して配列を作成

 range()関数を使用すると「数値」、「文字列」を値とする要素を指定した数だけ連続して作成します。最初の引数で数を指定します。次の引数で値となる数値か文字列を指定します。

実行結果
Array ( [0] => 3 [1] => 4 [2] => 5 [3] => 6 )
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )

その他の配列操作については、こちらをご覧下さい。


様々な配列操作

  • 配列操作 配列の要素を追加する「array_pad()」
  • 配列操作 配列を分割する「array_chunk()」
  • 配列操作 配列の各要素にユーザ関数を適用する「array_walk()」
  • 配列操作 配列のキーと値が入れ替わる「array_flip()」
  • 配列操作 配列の要素のフィルタリングを行う「array_filter()」
  • 配列操作 配列の要素の削除と追加「array_splice()」

  • 配列検索

  • 配列検索 指定したキーが存在するかどうかのチェックをする「array_key_exists()」
  • 配列検索 配列に値があるか調べる「in_array()」
  • 配列検索 配列の値を検索し見つかった場合に対応するキーを返す「array_search()」

  • 配列ソート

  • 配列ソート 値によるソート 昇順(低い位から高い位へ)「sort()」
  • 配列ソート 値によるソート 降順(高い位から低い位へ)「rsort()」
  • 配列ソート 値によるソート ユーザ定義順「usort()」
  • 配列ソート 値によるソート 昇順(低い位から高い位へ)(キーと値の関係は維持)「asort()」
  • 配列ソート 値によるソート 降順(高い位から低い位へ)(キーと値の関係は維持)「arsort()」
  • 配列ソート 値によるソート ユーザ定義順「uasort()」
  • 配列ソート キーによるソート 昇順(低い位から高い位へ)(キーと値の関係は維持)「ksort()」
  • 配列ソート キーによるソート 降順(高い位から低い位へ)(キーと値の関係は維持)「krsort()」
  • 配列ソート キーによるソート ユーザ定義順「uksort()」
  • 配列ソート 複数配列を一括でソートする「array_multisort()」
  • 配列ソート 配列を逆順にソート「array_reverse()」
  • 配列ソート 配列の順番をランダムにする「shuffle()」

  • その他

  • 配列の大きさを取得「count()」
  • 配列を変数へ変換「extract()」
  • 配列の中身を確認(デバック)「var_dump()」
  • 配列の結合「array_merge()」
  • 配列要素を変数に格納「list()」
  • 配列取得 配列の一部を抽出する「array_slice()」
  • 配列取得 配列のキーを取得する「array_keys()」

  • 配列と変数の変換

    POINT

    • extract()関数で配列を変数に変換

    extract()関数で配列を変数に変換する

    extract()関数を使用すると配列のキーが変数の名前になり、配列の値が変数の値になります。連想配列を引数とします。

    実行結果
    鈴木 suzuki@mail.com 男

    この関数を使用した場合、生成する変数名と同じ変数名が存在していた場合、既存の変数を上書きします
    それを避けるために以下のように引数を追加設定すると変数の衝突を防ぐことが出来ます。
    1番目の引数:連想配列
    2番目の引数:EXTR_PREFIX_ALL
    3番目の引数:同じ変数名が存在していた場合、生成する変数名の先頭に追加する文字列

    実行結果
    鈴木 suzuki@mail.com 男


    配列の展開 foreach文、for文、while文

    POINT

    • foreach構文を利用して配列を展開

    配列へのアクセスの説明で、配列変数名とキー名を直接指定して配列の値を出力しましたが、配列は要素数が多く階層構造になることが多いでしょう。そのような場合、foreach文などのループ処理で配列の要素を展開する必要があります。


    foreach構文を利用して配列を展開する

    foreach文は配列の並び順に従って順番に処理します。並び順は要素の追加された順です。

    値のみ取得
    foreach(配列 as $value){
     文
     文
    }

    値とキーを取得
    foreach(配列 as $key => $value){
     文
     文
    }

    foreach文で配列の値を展開

    配列をループ処理して各配列要素の値を echo で表示させています。

    実行結果
    現在の配列要素の値は[ 1 ]です。
    現在の配列要素の値は[ 2 ]です。
    現在の配列要素の値は[ 3 ]です。
    現在の配列要素の値は[ 4 ]です。
    現在の配列要素の値は[ 5 ]です。

    foreach文で配列のキーと値の両方を展開

    配列をループ処理して各配列要素のキーと値を echo で表示させています。

    実行結果
    現在の配列要素のキーは[ name ]で値は[ TRY PHP! ]です。
    現在の配列要素のキーは[ url ]で値は[ http://wepicks.net ]です。
    現在の配列要素のキーは[ mail ]で値は[ info@wepicks.net ]です。

    foreach文で二次元配列のキーと値の両方を展開

    実行結果
    ■Aクラス
     【 name 】:suzuki
     【 mail 】:suzuki@wepicks.net
     【 age 】:18
    ■Bクラス
     【 name 】:yamada
     【 mail 】:yamada@wepicks.net
     【 age 】:35
    ■Cクラス
     【 name 】:sato
     【 mail 】:sato@wepicks.net
     【 age 】:23


    for文 や while文 を利用して配列を展開する

    インデックス配列を展開するのに for文 や while文 が利用できます。

    for文でインデックス配列の値を展開

    for(式1; 式2; 式3){
     文
     文
    }

    実行結果
    そば
    ラーメン
    うどん
    焼きそば
    そーめん

    while文でインデックス配列の値を展開

    while(){
     文
     文
    }

    実行結果
    そば
    ラーメン
    うどん
    焼きそば
    そーめん


    サンプルコード

    – サンプル Click Here ! –

    – サンプル Click Here ! –


    配列関数サンプル


    配列作成

  • 配列作成 都道府県配列
  • 配列作成 数値がキーのインデックス配列作成
  • 配列作成 文字列がキーの連想配列作成
  • 配列作成 多次元配列作成
  • 配列作成 範囲を指定して整数値の配列を作る「range()」
  • 配列作成 変数から配列を作成する「compact()」

  • 配列操作

  • 配列操作 配列の要素を追加する「array_pad()」
  • 配列操作 配列を分割する「array_chunk()」
  • 配列操作 配列の各要素にユーザ関数を適用する「array_walk()」
  • 配列操作 配列のキーと値が入れ替わる「array_flip()」
  • 配列操作 配列の要素のフィルタリングを行う「array_filter()」
  • 配列操作 配列の要素の削除と追加「array_splice()」

  • 配列検索

  • 配列検索 指定したキーが存在するかどうかのチェックをする「array_key_exists()」
  • 配列検索 配列に値があるか調べる「in_array()」
  • 配列検索 配列の値を検索し見つかった場合に対応するキーを返す「array_search()」

  • 配列ソート

  • 配列ソート 値によるソート 昇順(低い位から高い位へ)「sort()」
  • 配列ソート 値によるソート 降順(高い位から低い位へ)「rsort()」
  • 配列ソート 値によるソート ユーザ定義順「usort()」
  • 配列ソート 値によるソート 昇順(低い位から高い位へ)(キーと値の関係は維持)「asort()」
  • 配列ソート 値によるソート 降順(高い位から低い位へ)(キーと値の関係は維持)「arsort()」
  • 配列ソート 値によるソート ユーザ定義順「uasort()」
  • 配列ソート キーによるソート 昇順(低い位から高い位へ)(キーと値の関係は維持)「ksort()」
  • 配列ソート キーによるソート 降順(高い位から低い位へ)(キーと値の関係は維持)「krsort()」
  • 配列ソート キーによるソート ユーザ定義順「uksort()」
  • 配列ソート 複数配列を一括でソートする「array_multisort()」
  • 配列ソート 配列を逆順にソート「array_reverse()」
  • 配列ソート 配列の順番をランダムにする「shuffle()」

  • その他

  • 配列の大きさを取得「count()」
  • 配列を変数へ変換「extract()」
  • 配列の中身を確認(デバック)「var_dump()」
  • 配列の結合「array_merge()」
  • 配列要素を変数に格納「list()」
  • 配列取得 配列の一部を抽出する「array_slice()」
  • 配列取得 配列のキーを取得する「array_keys()」

  • タグ(=記事関連ワード)

    日付

    公開日:2016年12月21日
    最終更新日:2018年06月30日

    関連記事

    配列関数サンプル

    このカテゴリの他のページ

    この記事へのコメント

    トラックバックurl

    http://wepicks.net/phpref-array/trackback/

    page top