PHPにおける配列:同種のデータをまとめて扱うためのしくみ

はじめに
これから始めるPHP入門コラムでは、PHPを学ぶ人が、PHPで簡単なプログラムを書けるようになるまでに必要な知識とポイントをTips的に書いていきます。今後PHPのスキルを身につけて仕事に役立てたい、という方のために「PHP技術者認定初級試験」の出題範囲を意識しながら進めていきますので、ぜひ最後までお付き合いください。
今回のあらすじ
- 数値配列
- 連想配列
- 配列への要素の追加
- 配列の要素の更新
- 配列の要素の削除
- 配列をループする
- 多重配列
- 文字列から配列に変換する
- 配列から文字列に変換する
- 配列操作関数
配列とは
配列とは、データの集まりのことです。PHPで配列を宣言するにはarrayという関数を使います。例えば家族の名前を配列に入れてみると、このようになります。
1 | $myFamily = array("チチ", "ハハ", "タロウ"); |
PHP5.4以降では他の言語の書式を導入して、以下のようにも書けるようになりました。
1 | $myFamily = ["チチ", "ハハ", "タロウ"]; |
このコラムではarray()の方で進めていきます。
数値配列
上記の$myFamilyという変数には、3つの要素を含む配列が代入されました。var_dump関数を使って、この変数の中身がどうなっているのか見てみましょう。
1 | var_dump($myFamily); |
2 | // array(3) { |
3 | // [0]=> |
4 | // string(6) "チチ" |
5 | // [1]=> |
6 | // string(6) "ハハ" |
7 | // [2]=> |
8 | // string(9) "タロウ" |
9 | // } |
それぞれの要素には番号が振られていますよね。これらの番号は、各要素を参照するときに使います。
1 | echo $myFamily[0]; |
2 | // チチ |
プログラミングの世界では、番号は0から振られることが一般的で、PHPの配列も0から始まります。この番号のことを「key(添え字)」と呼びます。keyは数値、文字列のどちらも使えます。またkeyに対応する要素を「value(値)」といいます。valueには数値や文字列以外にも、bool値、null値、配列、オブジェクトなどを使うことができます。
配列を作る際に、keyは任意に設定することができます。この場合、各要素は入力した順番に並ぶため、0から順番に並ぶとは限りません。
01 | $myFamily = array( |
02 | 1 => "チチ", |
03 | 2 => "ハハ", |
04 | 0 => "タロウ" |
05 | ); |
06 |
07 | var_dump($myFamily); |
08 | // array(3) { |
09 | // [1]=> |
10 | // string(6) "チチ" |
11 | // [2]=> |
12 | // string(6) "ハハ" |
13 | // [0]=> |
14 | // string(9) "タロウ" |
15 | // } |
以上のように、keyに数値だけを使用した配列を「数値配列」と呼びます。
連想配列
一方、keyに文字列を使った配列は「連想配列」といいます。
01 | $myFamily = array( |
02 | "father" => "チチ", |
03 | "mother" => "ハハ", |
04 | "me" => "タロウ" |
05 | ); |
06 |
07 | var_dump($myFamily); |
08 | // array(3) { |
09 | // ["father"]=> |
10 | // string(6) "チチ" |
11 | // ["mother"]=> |
12 | // string(6) "ハハ" |
13 | // ["me"]=> |
14 | // string(9) "タロウ" |
15 | // } |
上の例の場合、$myFamily[0]に対応するもの(値)はありません。
1 | echo $myFamily[0]; |
2 | // (NULLなので何も出力されない) |
3 | echo $myFamily["me"]; |
4 | // タロウ |
配列に要素を追加する
あとから配列に要素を追加する場合、添え字を空にした[]を使うと、現在の配列の大きさを意識することなく、配列の最後に新しい要素を追加できます。
数値配列
01 | $myFamily = array("チチ", "ハハ", "タロウ"); |
02 | $myFamily[] = "セブン"; |
03 |
04 | var_dump($myFamily); |
05 | // array(4) { |
06 | // [0]=> |
07 | // string(6) "チチ" |
08 | // [1]=> |
09 | // string(6) "ハハ" |
10 | // [2]=> |
11 | // string(9) "タロウ" |
12 | // [3]=> |
13 | // string(9) "セブン" |
14 | // } |
連想配列
01 | $myFamily = array( |
02 | "father" => "チチ", |
03 | "mother" => "ハハ", |
04 | "me" => "タロウ" |
05 | ); |
06 | $myFamily[] = "セブン"; |
07 | var_dump($myFamily); |
08 |
09 | // array(4) { |
10 | // ["father"]=> |
11 | // string(6) "チチ" |
12 | // ["mother"]=> |
13 | // string(6) "ハハ" |
14 | // ["me"]=> |
15 | // string(9) "タロウ" |
16 | // [0]=> |
17 | // string(9) "セブン" |
18 | // } |
どちらの場合も、あとから追加した「セブン」に一番大きい番号のkey(文字列のkeyは対象外)が割り当てられています。
keyに数値(0、1など)を指定せずに、数値文字列('0'、"1"など)を指定した場合、そのkeyは自動的に数値に変換されます。
連想配列
01 | $myFamily = array( |
02 | "father" => "チチ", |
03 | "mother" => "ハハ", |
04 | "0" => "タロウ" |
05 | ); |
06 | $myFamily[] = "セブン"; |
07 | var_dump($myFamily); |
08 |
09 | // array(4) { |
10 | // ["father"]=> |
11 | // string(6) "チチ" |
12 | // ["mother"]=> |
13 | // string(6) "ハハ" |
14 | // [0]=> |
15 | // string(9) "タロウ" |
16 | // [1]=> |
17 | // string(9) "セブン" |
18 | // } |
配列のkeyを指定する
keyを指定するには以下のように指定します。1つの配列内で数値と文字列のkeyを併用することもできます。ただし、混在させない方が理解しやすいコードになります。
01 | $myFamily = array("チチ", "ハハ", "タロウ"); |
02 | $myFamily[10] = "セブン"; |
03 | $myFamily['brother'] = "ギンガ"; |
04 |
05 | var_dump($myFamily); |
06 | // array(4) { |
07 | // [0]=> |
08 | // string(6) "チチ" |
09 | // [1]=> |
10 | // string(6) "ハハ" |
11 | // [2]=> |
12 | // string(9) "タロウ" |
13 | // [10]=> |
14 | // string(9) "セブン" |
15 | // ["brother"]=> |
16 | // string(9) "ギンガ" |
17 | // } |
配列の要素の更新
すでに同名のkeyがある場合に、新たに値を設定すると、値は上書きされます。
01 | $myFamily[2] = "ジロウ"; |
02 |
03 | var_dump($myFamily); |
04 | // array(4) { |
05 | // [0]=> |
06 | // string(6) "父" |
07 | // [1]=> |
08 | // string(6) "ハハ" |
09 | // [2]=> |
10 | // string(9) "ジロウ" |
11 | // [10]=> |
12 | // string(9) "セブン" |
13 | // ["brother"]=> |
14 | // string(9) "ギンガ" |
15 | // } |
配列の要素の削除
要素を削除するには、unset関数を使います。
01 | $myFamily = array( |
02 | "father" => "チチ", |
03 | "mother" => "ハハ", |
04 | "me" => "タロウ" |
05 | ); |
06 | unset($myFamily["me"]); |
07 | var_dump($myFamily); |
08 |
09 | // array(2) { |
10 | // ["father"]=> |
11 | // string(6) "チチ" |
12 | // ["mother"]=> |
13 | // string(6) "ハハ" |
14 | // } |