PHPの配列変数、array、キー、多次元配列&var_dumpWeb業界で働くためのPHP入門(5)(2/2 ページ)

» 2017年05月29日 05時00分 公開
前のページへ 1|2       

複数の値をまとめて設定する[]とarray()

 これまでの例では、要素を1つずつ配列に格納していましたが、まとめて格納する方法もあります。これには配列を作り出す[ ]記号を使うことです。

<?php
$colorMagenta = [
    "red" => 255,
    "green" => 0,
    "blue" => 255,
];  //【1】
print("<pre>");
var_dump($colorMagenta);
print("</pre>");
リスト3 phplesson/chap05/useArrayFunc.php

 実行結果はリスト2と同じです。

 【1】の記述が[ ]による配列の作成です。「=>」という記号でキーと値を連結し、カンマで区切って指定します。例によって空白や改行はあってもなくても文法的な問題はありませんが、要素ごとに改行を入れておくと見やすく記述できます。

 また、最後の要素のカンマも不要ですが、常にカンマを入れておけば、要素の追加が容易になりミスも防げます。

 配列変数の初期化を行う場合、リスト1や2のように各要素に1つずつ値を格納する方法ではなく、[]を使うようにしましょう。[]で初期化した後、要素の追加や変更をする場合にのみリスト1や2のような方法を使います。

 なお、[ ]による配列作成は、新たに配列を作り出すものなので、既存の配列に対して複数の要素をまとめて追加することはできません。

コラム「array()関数」

 配列の値をまとめて設定する方法は、もともとはarray()関数を使用していました。それを使うと、リスト3の【1】は、以下のようになります。

$colorMagenta = array(
    "red" => 255,
    "green" => 0,
    "blue" => 255,
);

 array()の代わりとしての[]は、PHP 5.4以降で使えるようになりました。ですので、古いPHPのソースではarray()が使われていますし、今でも使っても構いません。


キーを使わずに[ ]を使う

 では、次の例のようにキーを使わずに配列を作成したらどのようになるでしょうか。

<?php
$greek = ["alpha", "beta", "gamma"];  //【1】
 
print("<pre>");
var_dump($greek);
print("</pre>");
 
$greek[] = "delta";  //【2】
 
print("<pre>");
var_dump($greek);
print("</pre>");
リスト4 phplesson/chap05/useArrayWithoutKey.php

 【1】の記述が、それに当たります。実行結果は以下の通りです。

array(3) {
  [0]=>
  string(5) "alpha"
  [1]=>
  string(4) "beta"
  [2]=>
  string(5) "gamma"
}
array(4) {
  [0]=>
  string(5) "alpha"
  [1]=>
  string(4) "beta"
  [2]=>
  string(5) "gamma"
  [3]=>
  string(5) "delta"
}

 この結果から分かるように、数値のキーを0から連続で使ったことと同じになります。前述した通り、これが一般的にいう「配列」の使い方です。なお上記例では、改行せずに1行で記述していますが、キーを指定しないのであれば、このような方式もアリです。長いようなら適宜改行を入れましょう。

 ところで、このようないわゆる「配列」の末尾にデータを追加する場合はどのようにすればいいのでしょうか。それがリスト4の【2】の記述です。キーを指定せずに、つまり、角かっこの中に何も記述せずに値を代入すると、配列の末尾にデータが追加されます。

キーは整数と文字列を混在させることもできる

 キーに用いる値は、次のように整数と文字列を混在させることもできます。

$foo = [
    1 => "one",
    "two" => 2,
];

 ただ、一般的な使い方を考えると、整数を使うなら全て整数、文字列を使うなら全て文字列にする場合がほとんどです。

 もし、混在させる場合に気を付けておきたいのは、キーでは可能な場合は文字列が整数に変換されるということです。そのため、数字のみの文字列のキーは存在しません。次のコード例は、結果として上の例と同じものになります。var_dump()で確認してみましょう。

$foo = [
    "1" => "one",
    "two" => 2,
];

 []で値をまとめて設定する場合だけではなく、各要素個別に値を代入したり参照したりするときも、この変換は行われます。従って通常は気にしなくてもよいのですが、頭の隅に入れておいてください。

配列の中に配列(多次元配列)

 配列の中に配列を格納して、より複雑なデータ構造を作ることができます。サンプルを見てみましょう。

<?php
$colors = [
	"magenta" => [
		"red" => 255,
		"green" => 0,
		"blue" => 255,
	],
	"black" => [
		"red" => 0,
		"green" => 0,
		"blue" => 0,
	],
]; //【1】
print("<pre>");
var_dump($colors);
print("</pre>");
$oneElement = $colors["magenta"]["blue"];  //【2】
print("要素ひとつだけ表示: ".$oneElement);
リスト5 phplesson/chap05/useNestedArray.php

 実行結果は以下の通りです。

array(2) {
  ["magenta"]=>
  array(3) {
    ["red"]=>
    int(255)
    ["green"]=>
    int(0)
    ["blue"]=>
    int(255)
  }
  ["black"]=>
  array(3) {
    ["red"]=>
    int(0)
    ["green"]=>
    int(0)
    ["blue"]=>
    int(0)
  }
}
要素ひとつだけ表示: 255

 【1】を見ると、配列の中に配列が記述されています。こういった2階層の配列は縦横の表のようにも見えるので、「2次元配列」と呼ぶこともあります。さらに、もう1段配列を格納して「3次元配列」にすることもでき、このような配列を「多次元配列」といいます。

 なお、入れ子になった要素1つへのアクセスは、【2】のように角かっこを続けて使います。

次回は、ループ(繰り返し)処理について

 配列については、操作方法などまだ解説すべき点はありますが、次回はループ(繰り返し)処理について解説しますので、お楽しみに。

今回のサンプルコード

 今回のサンプルコードはこちらからダウンロードできます。

■更新履歴

【2014/4/16】初版公開(山口晴広,株式会社イメージズ・アンド・ワーズ)。

【2017/5/29】PHP 7.1含め2017年の情報に合うように更新(齊藤新三/山田祥寛(監修),WINGSプロジェクト)。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。