この記事では、PHPにおける配列の使い方を解説します。
文字列と同様、PHPでは配列の扱いもそれほど難しくはありません。
配列を使いこなせるようになると、できることの幅がグッと広がります。
PHPでは特に連想配列が便利で色々な処理に応用できますので、是非基本の使い方を覚えておいてください。
目次
配列とは?
まず、そもそも配列とは何か?について簡単に解説します。
配列とは、簡単に言うと複数のデータを扱うことができる変数です。
言葉で説明するよりも、実際に例を見てみるのが早いでしょう。以下が配列のイメージです。
// 変数
$var = 'a';
// 配列変数
$ary = array('a', 'b', 'c');
変数 $var には ‘a’ という1つのデータのみ格納されているのに対して、配列変数 $ary には ‘a’, ‘b’, ‘c’ という3つのデータが格納されています。
配列には大きく分けて以下の2つの書き方があります。
- 添字配列
- 連想配列
それぞれについて、下記で解説します。
添字配列
まず、配列には「添字」と「値」という要素があります。以下の例は「値」だけを並べたものなのですが、では「添字」がどうなっているかというと、これはprint_r()という関数で配列の中身を出力してみると確認できます。
$ary = array('a', 'b', 'c');
print_r($ary);
Array
(
[0] => a
=> b
=> c
)
0,1,2という連番になっている部分が添字です。このように、添字が整数のみで構成される配列を、添字配列といいます。
連想配列
添字配列では、添字は0からの連番で整数でしたが、実はこの添字は文字列も使うことができます。添字部分を文字列にした配列を、連想配列といいます。
$ary = array('first' => 'a', 'second' => 'b', 'third' => 'c');
print_r($ary);
Array
(
[first] => a
[second] => b
[third] => c
)
添字部分がfirst, second, thirdという感じで変わっていると思います。
ちなみにここまで説明してきてなんですが、「添字」という言葉は個人的にはあまり使いません。プログラミングの学習をしっかりしてきた人になら通じますが、素人や初心者には伝わらなかったりするので、配列の「キー」と言ったりします。
以降の文章で「キー」と書かれていたら、それは「添字」のことだと思ってください。
多次元配列
配列の種類としては「添字配列」と「連想配列」の2つですが、もうひとつ「多次元配列」という概念にも触れておきます。
配列は、配列の中に配列を入れ子にすることもでき、そのような配列を多次元配列といいます。
多次元配列の構成要素は添字配列でも連想配列でもどちらでも可能です。
$ary = array(
array('id' => 1, 'name' => 'りんご'),
array('id' => 2, 'name' => 'みかん'),
array('id' => 3, 'name' => 'バナナ'),
);
print_r($ary);
Array
(
[0] => Array
(
[id] => 1
[name] => りんご
)
=> Array
(
[id] => 2
[name] => みかん
)
=> Array
(
[id] => 3
[name] => バナナ
)
)
このように書くと、添字配列の中に連想配列。
$ary = array(
'apple' => array('id' => 1, 'name' => 'りんご'),
'orange' => array('id' => 2, 'name' => 'みかん'),
'banana' => array('id' => 3, 'name' => 'バナナ'),
);
print_r($ary);
Array
(
[apple] => Array
(
[id] => 1
[name] => りんご
)
[orange] => Array
(
[id] => 2
[name] => みかん
)
[banana] => Array
(
[id] => 3
[name] => バナナ
)
)
この場合は連想配列の中に連想配列、という感じですね。
配列の使い方
次に、配列の具体的な使い方を解説していきます。
配列の初期化
まずは初期化です。
基本的にPHPでは初期化をしなくても配列を使えるのですが、一度配列の中身をクリアしたい場合や、明示的にその変数が配列であることを示す目的であえて記述したりもします。
$ary = array();
書き方としては、先ほどから出てきているarray()という関数を引数なしで記述すると、配列の初期化になります。
配列の参照
配列の中身を参照するには、変数名の後に[]を付けて、その中でキーを指定します。
// 添字配列の場合
$ary = array('a', 'b', 'c');
echo $ary[0]; // 「a」を出力
// 連想配列の場合
$ary = array('first' => 'a', 'second' => 'b', 'third' => 'c');
echo $ary['second']; // 「b」を出力
// 多次元配列の場合
$ary = array(
array('id' => 1, 'name' => 'りんご'),
array('id' => 2, 'name' => 'みかん'),
array('id' => 3, 'name' => 'バナナ'),
);
echo $ary['name']; // 「バナナ」を出力
配列の追加
配列の追加は、配列の参照で説明した書き方で直接値を代入することもできますし、添字配列の場合は、キーを何も書かずに[]と書くことで、配列の末尾にデータを追加することもできます。
// 添字配列の場合
$ary = array('a', 'b', 'c');
$ary[] = 'd';
// 連想配列の場合
$ary = array('first' => 'a', 'second' => 'b', 'third' => 'c');
$ary['fourth'] = 'd';
// 多次元配列の場合
$ary = array(
array('id' => 1, 'name' => 'りんご'),
array('id' => 2, 'name' => 'みかん'),
array('id' => 3, 'name' => 'バナナ'),
);
$ary[] = array('id' => 4, 'name' => 'レモン');
配列の先頭に追加したい、途中に追加したい、という場合は関数を使って追加することができます。
$ary = array('b', 'c', 'e');
// 配列の先頭に追加
array_unshift($ary, 'a');
// 配列の途中に追加
array_splice($ary, 3, 0, 'd');
// 配列の末尾に追加
array_push($ary, 'f');
少し補足をすると、array_splice()は本来は配列の置換をする関数なのですが、第3引数を0にすることで、ほかの要素を削除せずに追加ができます。
また、末尾に追加するarray_push()は、上に書いた[]で追加するのと同じなのですが、複数の値をまとめて追加できたりもします。
関数の詳細は、PHPのマニュアルを参照してください。右上の検索ボックスに関数名を入れると詳細を確認できます。
http://php.net/manual/ja/index.php
配列の削除
配列を削除するには、1つの要素だけであれば、unset()という関数を使います。
// 添字配列の場合
$ary = array('a', 'b', 'c');
unset($ary[0]); // 「a」を削除
// 連想配列の場合
$ary = array('first' => 'a', 'second' => 'b', 'third' => 'c');
unset($ary['second']); // 「b」を削除
添字配列の複数の要素をまとめて削除したい場合は、先ほども出てきたarray_splice()という関数が使えます。
$ary = array('a', 'b', 'c', 'd');
array_splice($ary, 1, 2); // 「b,c」を削除
先ほども書いたように本来は置換を行う関数ですので、置換後の値を指定しなれば、削除になります。
配列のループ処理(foreach)
PHPで配列を扱う上で必ず覚えておきたいのが、foreachを使った配列のループ処理です。
特にDBと連携するようなシステムの場合、使う場面は非常に多いです。
$ary = array(
'apple' => array('id' => 1, 'name' => 'りんご'),
'orange' => array('id' => 2, 'name' => 'みかん'),
'banana' => array('id' => 3, 'name' => 'バナナ'),
);
foreach($ary as $key => $row){
echo $key."のidは".$row['id']."、nameは".$row['name']."です\n";
}
appleのidは1、nameはりんごです
orangeのidは2、nameはみかんです
bananaのidは3、nameはバナナです
この例でいうと、$keyには配列のキーが、$rowには値が格納され、配列の全要素をループで繰り返します。
あえて多次元配列を例に使ったので、この場合$rowも配列になります。なので、$rowをさらにforeachで回すこともできます。
配列のもうひとつの書き方
これまで、配列を記述するときはarray()という関数で記述してきましたが、実はPHP5.4以降では別の書き方で記述することができます。
// 以下は同じ
$ary = array();
$ary = [];
// 以下は同じ
$ary = array('a', 'b', 'c');
$ary = ['a', 'b', 'c'];
このように、[]がarray()と同じ意味になります。PHP以外の言語を使ったことがある方でしたら、こっちのほうが馴染みやすいかもしれないですね。
まあどちらで書くかは好みで良いと思いますが、他の人のコードを見たときに混乱しないように、覚えてだけおくと良いと思います。
まとめ
最後に概要をまとめます。
- 配列には「添字配列」と「連想配列」がある
- 配列は「多次元配列」で入れ子にすることができる
- foreachの使い方を是非覚えよう
- 配列の別の書き方もある
配列に関しては、まだまだ覚えるべきことがたくさんありますので、随時個別の記事で色々なノウハウを共有していきたいと思います。