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