ITHACK
~ みんなのIT部門 ~

【PHP】配列(array) – 複数の値を記憶するデータ構造

変数の型には複数の値を記憶できる配列型があります。
配列型の変数は複数の値を記憶することができます。

ここでは、配列について解説します。

  • 配列

配列とは

配列は複数の値を記憶するデータ構造です。
整数型や文字列型と同様に配列には配列型(array)が存在します。

初めは配列型の変数には複数の値を記憶できるイメージを持っておくと良いでしょう。

データ構造

配列型の変数は複数の値を記憶することができます。
記憶領域へ複数の紐付けを持てるイメージです。

※ 記憶領域については次の記事をご覧ください。

そして、値を記憶する時に各紐付きに名前を付けます。
例えば、次の画像のように各紐付けに0や1などの数値を付けることが可能です。

この名前のことをプログラミング用語でキーと呼び、キーは数値や文字列を付けることができます。
数値の場合は、特にインデックスや添字と呼ばれることがあります。

基本構文

配列は整数型などの変数と同様に宣言、初期化、値の記憶、値の取得があります。
それぞれの基本構文は次のようになります。

宣言

配列の宣言は2通りあります。

$変数名 = array()
$変数名 = []

array()または[]を記述して、配列型の値を作ります。
[]の方はarray()の短縮構文と呼ばれる省略した記法で、いずれでも配列型の値を作ることができます。

なお、ここでは[]を使用した方法で解説していきます。

初期化

配列は宣言時に初期値を記憶できます。

$変数名 = [ 値1, 値2, 値3 ];

[]の中に記憶する値をカンマ(,)区切りで記述します。
値は必要な数だけ記述することができます。(正確には記憶領域で容量まで)

キーは先頭から0,1,2…と連番で自動で割り当てられます。

値の記憶

値の記憶はキーを指定し、代入演算子で値を代入します。

$変数名[キー] = 値

値の取得

値の取得はキーを指定します。

$変数名[キー]

サンプルコード

フルーツの名前を記憶する配列のサンプルコードをご覧ください。

<?php

// 配列の宣言(初期化)
$fruits = [ 'Apple', 'Orange', 'Grape'];
// 値の取得と出力
echo $fruits[0]."\n";
echo $fruits[1]."\n";
echo $fruits[2]."\n";

// 既存キーに値を代入
$fruits[1] = 'Melon';
// 値の取得と出力
echo $fruits[1]."\n";

// 新規キーで値を代入
$fruits[4] = 'Strawberry';
// 値の取得と出力
echo $fruits[4]."\n";

?>
Apple
Orange
Grape
Melon
Strawberry

各コードの概要は次のようになります。

行数 概要
4 配列の宣言と初期化
6~8 $fruitsの全ての値を出力(キー0,1,2
11 $fruitsのキー1の値を再代入
13 $fruitsのキー1の値を出力
16 $fruitsに新しいキー(4)で値を記憶
18 $fruitsのキー4の値を出力

配列の宣言(初期化)、値の記憶・取得をするコードです。
整数型の変数と同様に再代入で記憶する値を変更することができ、新しいキーを指定して記憶する値を追加することもできます。

注意点

値の取得時に存在しないキーを指定するとエラーになります。
例えば、サンプルコードの16行目のキーを5にすると次のような実行結果になります。

PHP Warning:  Undefined array key 4 in sample.php on line 18

Warning: Undefined array key 4 in sample.php on line 18

これは18行目の処理でエラーになっており、『4というキーは存在しない』という内容です。
このように存在しないキーの値を取得しようとするとエラーになるので注意しましょう。

また、このようなエラーを避けるため、一般的にはキー(インデックス)は連番になっていることが望ましくあります。
新しく値を追加する場合、次の構文を使うことで自動で最後のキーの番号に1加算したキーに値を記憶してくれます。

$変数名[] = 値

また、複数値を一括で新しいキーに追加したい場合などはarray_pushやarray_mergeなどの関数を使用すると良いでしょう。

+α($argvについて)

コマンドライン引数の$argvは配列型の変数です。
詳しくは次の記事にてご覧ください。

演習問題

問題1

次の実行結果になるプログラムを作成してください。
なお、以下条件を満たすものとします。

  • 配列型の変数$price_listを使用
  • $price_list100027005800を記憶
  • $price_listの値の合計値を$totalに記憶
  • $totalを出力
9500

問題2

次の実行結果になるプログラムを作成してください。
なお、以下の条件を満たすものとします。

  • 配列型の変数$foods'Potatoes''Carrots''Onion'を記憶
  • コマンドライン引数で数値(0〜2)を与える
  • コマンドライン引数で与えた数値をキーとして$foodsを出力
$ php practice.php 0
Potatoes
$ php practice.php 1
Carrots
$ php practice.php 2
Potatoes

まとめ

配列は複数値を記憶できるデータ構造です。

初学者が挫折しやすいポイントの1つになりますが、頻繁に使われるテクニックになり、使えるようになるとより多くのプログラムを開発できるようになるので覚えていきましょう。