PHPの配列は、実際には順番付けられたマップです。マップは、 値をキーにマップする型で す。この型は、いくつかの手法で最適化されます。このため、実際の配列 またはリスト(ベクトル)、(あるマップの実装である)ハッシュテーブル、 ディレクトリ、コレクション、スタック、キュー等として使用することが 可能です。PHPの配列には他のPHP配列を値として保持することができるた め、非常に簡単にツリー構造を表現することが可能です。
これらの構造に関する説明は、本マニュアルの範囲外ですが、これらの構 造に各々に関する例を少なくとも一つ見付けることが可能です。これらの 構造に関するより詳細な情報については、データ構造に関する良書を購入 して下さい。
配列 は、言語構造array() で作成 することが可能です。この構造は、特定の数のカンマで区切られた key => valueの組みを引数とします。
key は、非負の 整数 または 文字列です。 あるキーが、非負の整数の標準的な表現形式である場合、 そのように解釈されます。(つまり、'8'は 8として解釈されます。一方、 '08'は'08'として解釈されま す。)
値は、何でも構いません。
キーを省略した場合、整数添字の最大値が使用され、新しいキーはそ の最大値+1となります。整数添字がまだ存在しない場合、そのキーは 0 (ゼロ)となります。値を代入済のキーを指定し た場合、そのキーは上書きされます。
array( [key =>] value , ... ) // key は string または非負の 整数のどちらか // value は何でも可 |
明示的に値を設定することにより、既存の配列を修正することも可能で す。
これは、角括弧の中にキーを指定することにより、配列に値を代入する ことにより行うことが可能です。キーを省略することも可能です。この 場合、空の角括弧("[]")の変数名として追加して 下さい。
$arr[key] = value; $arr[] = value; // key は string または非負の // 整数のどちらかです。 // value は何でもかまいません |
配列で使用する便利な関数がたくさんあります。 配列関数 の節を参照下さい。
注意 unset()関数は配列のキーを削除することが出来ます。 ただし、これによってインデックスの再構築が行われるわけでは ないということに気をつけてください。
制御構造foreach が配列用に限定して存在します。この構造は、配列の要素に簡単に連続 的にアクセスする手段を提供します。
古いスクリプトで次のような構文を見たことがあるかもしれません。
これは間違っていますが、動作します。では、なぜ間違っているのでしょ う? その理由は、構文の節に記述したように、角括弧の間 ('['および']')に式がなけれ ばならないためです。これは、次のように書くことが可能であることを 意味します。 これは、関数の出力を配列の添字として使用する例です。PHPは定数に ついても認識します。前にE_*を見たことがあるか もしれません。$error_descriptions[E_ERROR] = "A fatal error has occured"; $error_descriptions[E_WARNING] = "PHP issued a warning"; $error_descriptions[E_NOTICE] = "This is just an informal notice"; |
$error_descriptions[1] = "A fatal error has occured"; $error_descriptions[2] = "PHP issued a warning"; $error_descriptions[8] = "This is just an informal notice"; |
では、なぜ $foo[bar] は動作することが可能なの でしょう? それは、bar が定数式であることを 期待される構文で使用されているためです。しかし、この場合、 bar という名前の定数は存在しません。PHPは、 この場合、あなたが文字列"bar"のようにリテラル bar を指定したが引用符を忘れたと仮定します。
将来的に、PHPは他の定数またはキーワードを追加したいと思うかもし れず、問題となる可能性があります。例えば、現在でも、特別なキー ワードであるために単語 empty および defaultを使用することはできません。
そして、これらの議論が助けにならない場合:この構文は過去のもので あり、将来的に動作しなくなる可能性があります。
注意 error_reporting を E_ALL に変えた場合、PHPがこの構造が使用され ているところ見付ける度に警告が生成されます。この機能は、他の過 去の「機能」についても有効です。 (スクリプトに行 error_reporting(E_ALL); を 置いて下さい)
PHPの配列型は非常に解りにくいため、ここで、配列の強力な機能を示す いくつかの例を紹介します。
// this $a = array( 'color' => 'red' , 'taste' => 'sweet' , 'shape' => 'round' , 'name' => 'apple' , 4 // キーは0になります ); // これは以下と完全に同じです。 $a['color'] = 'red'; $a['taste'] = 'sweet'; $a['shape'] = 'round'; $a['name'] = 'apple'; $a[] = 4; // キーは0になります $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // この結果は配列 array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) // または単に array('a', 'b', 'c') となります |
配列の値をこのようなループで直接変更することはできないことに注意 して下さい。 これを解決するには、次のようにします。
この例は、1から始まる配列を作成します。
配列には順番が付けられます。異なったソート関数を用いて順番を変更 することも可能です。より詳細な情報については、配列関数 を参照下さい。
配列の値は何でも良いため、その値を他の配列とすることも可能です。 これにより、再帰的な配列や多次元の配列を作成することが可能です。