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);
通常配列と連想配列との混在
通常配列と連想配列との区別はないので、これらを混在させることも可能です。キーを省略しているので、「その時点での最大インデックス+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値は空文字列に変換される