PHP入門 配列

最終更新日

複数の値を納めることができる配列について解説しています。

配列の基本

配列は仕切りに番号が振られており、番号によって値にアクセスすることができます。

構文:配列の生成

$配列名 = [値1,値2,・・・・]

配列は、カンマ区切りの値をブラケット([])でくくった形式で表現します。空の配列を生成する場合は、[]とします。先頭から順に0、1、2・・・という番号が振られます。ブラケット([])でくくられた部分は、インデックス番号または添え字と呼ばれ、配列の何番目の要素を取り出すか表します。

下記の例では、5つ要素が格納されているので、指定できるインデックス番号は0~4となります。

<?php
$data = ['山田', '佐藤', '田中' ,'工藤','権藤'];
print $data[3];   //結果:工藤
配列最後のカンマは付けてもつけなくてもかまいません。複数行になる場合は、便宜上カンマを付けた方がよいです。

構文:配列へのアクセス(ブラケット構文)

$配列名[インデックス番号]

ブラケット構文を利用することで、配列の個々の要素に値をセットすることもできます。ブラケットでインデックス番号が指定されている他は、スカラー型の変数に値をセットするのと同じ要領です。すでに存在するインデックス番号が指定された場合、既存の値が書き換えられインデックス番号が省略された場合は、その時点での最大インデックス+1が自動的に割り振られます。

<?php
$data[0] = '山田';
$data[1] = '佐藤';
$data[2] = '田中';
$data[3] = '工藤';
$data[4] = '権藤';
$data[1] = '鈴木'; //1番目の要素の書き換え
$data[] = '花田'   //末尾に要素を追加 
print $data[4];   //結果:権藤

配列の内容を確認する

作成した内容を手軽に確認するには、print_r関数を使用します。配列やオブジェクトなど複合型の変数を見やすい形で出力します。<pre>タグを使用することで、スペースや改行付き結果を確認することができます。

<pre>
<?php
$data = ['山田', '佐藤', '田中' ,'工藤','権藤'];
print_r($data);
</pre>
実行結果
実行結果

連想配列の基本

連想配列は数値キー(インデックス)の代わりに文字列キーを使って要素を管理します。通常の配列と異なるのは、連想配列では「キー名 => 値」の形式でキーと値との対応関係を表しているという点です。記号「=>」は、キー名を値に対応させなさいという意味になります。キー名は重複させることができません。

構文:連想配列の生成

$配列名 = [キー1 => 値1, キー2 => 値2,・・・・]
<?php
$members= [
    '山田太郎' => '青森県',
    '工藤正一' => '宮城県',
    '佐藤けん' => '茨城県',
    '田中工事' => '東京都',
    '井本花子' => '京都府',
];
print $members['山田太郎'];  //結果:青森県
$members['新藤ふみ'] = '広島県';  //新たな要素を追加
$members['山田太郎'] = '静岡県';  //要素を更新

多次元配列

配列/連想配列の要素として格納できるのは、数値や文字列ばかりではなく、任意の型の値、配列そのものを格納することができます。入れ子の配列です。二次元配列、三次元配列、四次元配列と入れ子することで増やすことができます。ただし、通常使用する場合は、3次元配列までとなります。

二次元配列

$data1 = [
    ['X-1','X-2','X-3'],
    ['Y-1','Y-2','Y-3'],
    ['Z-1','Z-2','Z-3'],
];
二次元配列解説
イメージ

多次元配列から値を取り出す方法

$data1[1][0]  //結果:Y-1

3次元配列

サイズ3×3×3の3次元配列を作成します。

<?php
$data2 = [
    [
      ['なしS','なしM','なしL'],
      ['洋ナシS','洋ナシM','洋ナシL'],
      ['りんごS','りんごM','りんごL'],
    ],
    [
      ['ももS','ももM','ももL'],
      ['ぶどうS','ぶどうM','ぶどうL'],
      ['バナナS','バナナM','バナナL'],
    ],
    [
      ['みかんS','みかんM','みかんL'],
      ['オレンジS','オレンジM','オレンジL'],
      ['グレープフルーツS','グレープフルーツM','グレープフルーツL'],
    ],
];

配列の中に連想配列を含めることもできます。

連想配列解説
<?php
$data3 = [
  [
    'name' => '山田太郎',
    'age' =>  '35',
    'sex' =>   '男',
  ],
  [
    'name' => '鈴木太郎',
    'age' =>  '30',
    'sex' =>   '男',
  ],
  [
    'name' => '工藤花子',
    'age' =>  '30',
    'sex' =>   '女',
  ],
];

通常配列と連想配列の関係

通常配列と連想配列は、PHPでは区別していません。

通常配列でキーを明示する

通常配列でもキー名を指定することができます。

<?php
$data = [1 => '山田',2 => '佐藤',3 => '田中',4 => '工藤'];
print_r($data);
実行結果
実行結果

一部の値だけインデックス番号を振ることもできます。

<?php
$data = [1 => '山田',4 => '佐藤','田中'];
print_r($data);
実行結果
実行結果

最大のインデックス番号が負数である場合は例外です。この場合、インデックス番号を決めるルールは、PHPバージョンによって異なります。PHP7.4以前では、強制t系にゼロが割り当てられるのに対して、PHP8以降では正数インデックスの場合と同じく、「最大インデックス値+1」が振られます。

<?php
$data = [-10 => '山田','田中'];
print_r($data);
実行結果
PHP8以降

通常配列と連想配列との混在

通常配列と連想配列との区別はないので、これらを混在させることも可能です。キーを省略しているので、「その時点での最大インデックス+1」が次のインデックスとして割り振られます。

<?php
$data = [ '山田' => '太郎',15 => '次郎', '鈴木' => '三郎' , '四郎'];
print_r($data);
実行結果
実行結果

キーは整数値/文字列に変換される

キーとして整数、または文字列をその他にも、任意のデータ型を指定できます。ただし、整数/文字列以外のキーが指定された場合には、内部的に整数/文字列に変換されます。

<?php
$data = [ 
  'str' => 0,  //文字列
  '7' => 1,    //整数 ➊
  '07' => 2,   //整数っぽい➊
  10.5 => 3,   //小数点数➋
  true => 4,   //bool値➌
  null => 5,   //null値➍
];
print_r($data);
実行結果
実行結果

変換のルールについて以下のとおりです。

  • ➊整数値として正しい形式の文字列はそのまま整数値に変換される。ただし、「07」のように10進数として妥当でない値はそのまま文字列となる
  • ➋小数点は切り捨てられる(四捨五入ではない)
  • ➌true/false値は、それぞれ1/0に変換される
  • ➍null値は空文字列に変換される
配列やオブジェクトを配列キーとすることはできません。