| | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
配列PHPの配列は、実際には順番付けられたマップです。マップは型の一種で、 値をキーにマップします。 この型は、いくつかの手法で最適化されます。このため、実際の配列 またはリスト(ベクトル)、(あるマップの実装である)ハッシュテーブル、 ディレクトリ、コレクション、スタック、キュー等として使用することが 可能です。PHPの配列には他のPHP配列を値として保持することができるた め、非常に簡単にツリー構造を表現することが可能です。 これらの構造に関する説明は、本マニュアルの範囲外ですが、これらの構 造に各々に関する例を少なくとも一つ見付けることが可能です。これらの 構造に関するより詳細な情報については、データ構造に関する良書を購入 してください。 構文array()で指定配列 は、言語に組み込まれた array() で作成することが可能です。この構造は、 特定の数のカンマで区切られた key => valueの組を引数とします。
key は、整数 または 文字列です。 あるキーが、整数の標準的な表現形式である場合、 そのように解釈されます(つまり、"8"は 8として解釈されます。一方、 "08"は"08"として解釈されま す)。key に浮動小数点数値を指定すると、 その値は integer に切り詰められます。 PHPにおいては添字配列と連想配列の間に違いはなく、配列型は1つだ けで、整数または文字列のインデックスを使用することができます。 値には、PHPの全ての型を使用することができます。
キーを省略した場合、整数添字の最大値が使用され、新しいキーはそ の最大値+1となります。整数値は負の数とすることができ、負の添字に ついても同様となります。例えば、最高時の添字が-6 の場合、次のキーは-5となります。 整数添字がまだ存在しない場合、キーは0(ゼロ)となります。 値が既に代入されているキーを指定した場合、元の値は上書きされます。
キーとして TRUE を使用した場合、 整数型の1がキーとして解釈されます。 キーとして FALSE を使用した場合、 整数型の0がキーとして解釈されます。 キーとしてNULLを使用した場合、空の文字列として評価 されます。キーとして空の文字列を使用すると、空の文字列のキーとその値を 作成(または上書き)します。空の括弧を用いた場合と同じではありません。 配列またはオブジェクトをキーとして使用することはできません。 これを行なうと、warning: Illegal offset type を発生します。 角括弧構文で作成/修正明示的に値を設定することにより、既存の配列を修正することも可能で す。 これは、角括弧の中にキーを指定し、配列に値を代入することにより行 います。キーを省略することも可能です。この場合、空の角括弧 ("[]")の変数名として追加してください。
有用な関数配列で使用する便利な関数がたくさんあります。 配列関数 の節を参照ください。
配列専用の制御構造としてforeachがあります。こ の構造は、配列の要素に簡単に連続的にアクセスする手段を提供します。 配列ですべきこととしてはならないことなぜ、$foo[bar] は使用できないのか?連想配列の添字の前後は常に引用符で括る必要があります。 例えば、$foo[bar]ではなく$foo['bar']を使用してください。 しかし、 $foo[bar]はなぜ誤りなのでしょうか? 古いスクリプトで次のような構文を見たことがあるかもしれません。 これは間違っていますが、動作します。では、なぜ間違っているのでしょ う? その理由は、このコードには文字列('bar' - 引用符で括られてい る)ではなく未定義の定数(bar)が使用されており、PHPが同じ名前の定 数を不幸にして同じコードの中に定義する可能性があるためです。 下位互換性の維持のために未定義の定数は同じ名前の文字列に自動的に 変換されるため、このコードは動作します。 例えば、barという名前の、定義されていない定数 があるとすると、PHPは'bar'という文字列でそれを 置換して使用します。
この具体例を以下に示します。
error_reporting()で (E_ALLを指定する等により) E_NOTICE レベルのエラー出力を有効にした場合、 上記のエラーが出力されます。 デフォルトでは、 error_reportingはこれらを表示しない設定になっています。 構文の節に記述したように、角括弧の間 ('['および']')には、式がなけれ ばなりません。これは、次のように書くことが可能であることを 意味します。 これは、関数の戻り値を配列の添字として使用する例です。PHPは定数に ついても認識し、以下のようなE_*の使用例を見た ことがあるかもしれません。
では、なぜ $foo[bar] は動作することが可能なの でしょう? それは、bar が定数式であることを 期待される構文で使用されているためです。しかし、この場合、 bar という名前の定数は存在しません。PHPは、 この場合、あなたが文字列"bar"のようにリテラル bar を指定したが引用符を忘れたと仮定します。 では、なぜ間違っているのでしょう?将来的に、PHPは他の定数またはキーワードを追加したいと思うかもし れず、問題となる可能性があります。例えば、現在でも、 単語 empty および defaultを使用することはできません。 これは、これらが、特別な 予約済みのキーワードである ためです。
配列への変換integer, float, string, boolean, resourceのいずれの型においても、 arrayに変換する場合、最初のスカラー値が割り当てら れている一つの要素(添字は0)を持つ配列を得ることになります。 objectを配列にする場合には、配列の要素として オブジェクトの属性(メンバー変数)を持つ配列を得ることになります。 添字はメンバー変数名となります。 NULL を配列に変換すると、空の配列を得ます。 比較array_diff() と 配列演算子 を用いると、配列を比較することができます。 例PHPの配列型は非常に解りにくいため、ここで、配列の強力な機能を示す いくつかの例を紹介します。
PHP 5 以降では、配列を参照渡しすることでその値を直接変更できるように なりました。それ以前のバージョンでは、以下のような回避策が必要です。
この例は、1から始まる配列を作成します。 配列には順番が付けられます。異なったソート関数を用いて順番を変更 することも可能です。より詳細な情報については、配列関数 を参照ください。 You can count the number of items in an array using the count() function. 配列の値は何でも良いため、その値を他の配列とすることも可能です。 これにより、再帰的な配列や多次元の配列を作成することが可能です。
配列の割り当てにおいて常に値がコピーされることに注意してください。 配列をリファレンスでコピーする場合にはリファレンス演算子を 使う必要があります。 |
|
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「配列」をGoogle検索
|