PHPの基礎 - 配列
概要
配列は、数値や文字列等と同様にデータ型の1つであり、キーと値のペアからなる要素を複数管理することができる。
ここでは、PHPにおける配列の使用方法について記載する。
配列の基礎
配列は、繰り返し文や配列のために用意された構文や関数等を使用して、効率的に格納された値を処理することができる。
以下の例では、配列resultを1つ定義して、各要素に値を格納している。
配列から値を取得するために、値とは別に重複しない値を持つインデックスを合わせて格納する。
格納する時は、インデックスと値をペアで格納し、取得する時は、インデックスを指定することで指定の値を取得することができる。
// 1つずつ定義
$result1[0] = 85;
$result1[1] = 92;
$result1[2] = 68;
print $result1[0];
print $result1[1];
print $result1[2];
// まとめて定義
$result2[0] = [85, 92, 68];
print $result2[0];
print $result2[1];
print $result2[2];
以下の例では、配列と繰り返し文と組み合わせている。
$result[0] = 85;
$result[1] = 92;
$result[2] = 68;
for ($i = 0; $i < 3; $i++) {
print $result[$i];
}
// count関数を使用する場合
$size = count($result);
for ($i = 0; $i < $size; $i++) {
print $result[$i];
}
詳細は、次のセクション以降で解説するが、配列のインデックスには整数と文字列を使用することができる。
インデックスに整数を使用する場合は繰り返し文等でインデックスの値を変化させることで、順に値を取得することができる。
また、以下の例のように、配列のために用意されたforeach
文を使用することもできる。
$result[0] = 85;
$result[1] = 92;
$result[2] = 68;
foreach($result as $val)
{
print $val;
}
配列への値の格納と取得
配列は、複数のデータを管理しており、1つ1つは要素と呼ばれる。要素には、インデックスと値のペアが格納される。
インデックスは、配列の中から値を取り出す時の目印になるもので、1つの配列の中に同じインデックスは存在しない。
インデックスを指定することで要素を特定でき、要素の中に含まれる値を取得することができる。
配列を定義するには、以下のように記述する。
$配列名
変数と同様、配列も事前に宣言する必要は無く、存在していない配列に値を格納する時に配列が自動的に作成される。
配列名として使用できる文字は、変数と同様、先頭がアンダーバーかアルファベットで始まり、その後にアンダーバー、数字、アルファベットが続く。
配列の中で特定の要素を表すには、配列の後に角括弧[]
でインデックスを囲み指定する。
$配列名[インデックス]
新しい要素を作成して値を格納するには、以下のように記述する。
$配列名[インデックス] = 値;
配列の中に既に存在しているインデックスを指定する場合、インデックスによって決まる要素に対して新しい値を格納する。
存在しないインデックスを指定する場合、新しい要素を作成して値を格納する。
配列から値を取得するには、以下のように要素を記述する。
$変数 = $配列名[インデックス];
インデックスの指定方法は、整数または文字列を指定することができる。(次のセクションに詳細を記載する)
$result['eigo'] = 72;
$result['suugaku'] = 82;
$name[0] = '山田';
$name[1] = '高橋';
print $name[0];
配列に含まれている値を確認するには、print_r関数を使用すると便利である。
print_r関数の引数に配列を指定すると、配列に含まれる要素の一覧を出力される。
開発段階において、配列の内容を確認する場合によく使用されるため、覚えておくこと。
print_r($配列名);
例えば、以下のように記述する。
$result[0] = 72;
$result[1] = 82;
print_r($result);
// 出力
[0] => 72
[1] => 82
連想配列
連想配列において、要素を作成したり要素から値を取得するには、キーを指定する必要がある。
PHPの連想配列では、キーとして整数と文字列を使用することができる。
キーに整数を指定する場合は、正の整数と負の整数を指定することが可能である。
整数を指定する場合、キーは連続した整数である必要はない。
$var[0] = 14;
$var[2] = 'Tokyo';
$var[-4] = 8400;
キーに文字列を指定する場合は、シングルクオーテーションまたはダブルクオーテションで括る必要がある。
文字列をクオーテーションで括らずに指定する場合、エラーにはならないが、未定義の定数が指定されたものとして扱われるため、
必ず、クオーテーションで括って指定すること。
$var['yamada'] = 86;
$var["endou"] = 75;
$var['aichi'] = 'nagoya';
なお、キーが整数で構成された文字列の場合、整数のキーが指定されたものとして扱われる。
$var['8'] = 75;
// 以下と同じ意味
$var[8] = 75;
ただし、キーが整数で構成された文字列であっても、以下のような場合は文字列のままである。
$var['08'] = 75; // 文字列08のまま
変数や定数を使ってキーを指定することもできる。
$key = 'peach';
$var[$key] = 120;
define("INDEX_KEY", 8);
$var[INDEX_KEY] = 120;
print_r($var);
// 出力
[peach] => 120
[8] => 120
また、キーとして変数を指定する場合、文字列の中に変数を記述して、変数展開をすることも可能である。
$key = 'peach';
$var["price_$key"] = 120;
print_r($var);
// 出力
[price_peach] => 120
キーの自動付与
配列に新しい要素を追加する場合、キーを省略することも可能である。
キーが省略された場合、整数のキーが自動で付与される。
付与される整数のキーは、現在、キーとして割り当てられている最大の整数に1を加えたものである。
整数のキーが1つも存在しない場合は0から付与される。
整数のキーを連続する数値で順に割り当てる場合に便利である。
キーを省略する場合は、以下のように記述する。
以下の例では、最初の要素のキーは0、次の要素のキーは1が付与される。
$var[] = 100;
$var[] = 'Tokyo';
print_r($var);
// 出力
[0] => 100
[1] => Tokyo
以下の例では、整数のキーとして7と12が存在するが最大のキーは12であるため、キーが省略された場合は13が付与される。
$var[12] = 100;
$var['Kudou'] = 72;
$var[7] = 100;
$var[] = 'Tokyo';
print_r($var);
// 出力
[12] => 100
[Kudou] => 72
[7] => 100
[13] => Tokyo
文字列のキーが存在する場合でも、自動的に付与されるキーには何も影響しない。
また、負の整数のキーのみ存在する場合、自動的に付与されるキーは0となる。
$var[-3] = 75;
$var[-12] = 45;
$var[] = 28;
$var[] = 83;
print_r($var);
// 出力
[-3] => 75
[-12] => 45
[0] => 28
[1] => 83
配列の初期化 : array()
配列に追加する要素をまとめて指定して初期化するには、array
を使用する。
array
を使用することで、配列に格納する要素の初期化を簡潔に記述することができる。
引数に指定されたキーと値により、初期化された配列を返す。
array
は関数のように使用されるが、厳密には関数ではなくPHPの言語構造の1つである。
array array ([ mixed $... ] )
要素が空の配列を定義する場合は、引数を指定せずにarray
を実行する。
$var = array();
要素を指定して配列を定義する場合は、以下のように引数を指定する。
$var = array('キー1' => 値1, 'キー2' => 値2, ...);
各要素に対して、キーと値をペアで指定する。
複数の要素を追加する場合は、カンマ,
で区切って記述する。
$var = array('Tokyo' => '東京', 'Osaka' => '大阪', 'Fukuoka' => '福岡');
また、キーを自動付与する場合は、array
の引数に値のみを記述する。
$var = array(値1, 値2, ...);
キーを指定する要素とキーを省略する要素を混在して引数に指定することも可能である。
$var = array(10 => '遠藤', '斉藤', '伊藤');
多次元配列
要素の値は、どのような値でも格納することができる。
そのため、数値や文字列に加えて、他の配列を格納することも可能である。
以下の例では、配列makerと配列typeをそれぞれ作成した後、この2つの配列を値とした要素を持つ2次元配列pcを作成している。
要素の値として格納した配列の要素に他の配列も格納できるため、多次元配列も作成できる。
$maker = array('富士通', 'NEC', 'Sony', 'Sharp');
$type = array('Note', 'Desktop');
$pc = array($maker, $type);
また、以下のように記述しても同様の2次元配列を作成できる。
$maker = array('富士通', 'NEC', 'Sony', 'Sharp');
$type = array('Note', 'Desktop');
$pc[0] = $maker;
$pc[1] = $type;
多次元配列において、キーを指定して要素を指定する場合、要素に含まれる配列を取得できる。
2次元配列では、値として含まれる配列の中のさらに要素を指定する場合は、以下のように記述する。
まず、配列に値として格納されている配列を変数に格納する。
次に、取得した配列に対して、キーを指定して値を取得する。
$変数1 = $配列名[キー]; $変数2 = $変数1[値として格納された配列のキー];
上記の記述方法でも構わないが、一般的に、以下のようにまとめて記述する。
$変数 = $配列変数名[キー][値として格納された配列のキー];
$maker = array('富士通', 'NEC', 'Sony', 'Sharp');
$type = array('Note', 'Desktop');
$pc = array($maker, $type);
print $pc[0][1]; // NEC と出力
print $pc[1][0]; // Note と出力
※注意
なお、配列Aを配列Bの値として格納する場合、配列Aが持つ要素がコピーされて配列Bの値として格納される。
そのため、後から元になった配列Aの要素を変更しても配列Bの要素には影響しない。