| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
配列PHP の配列は、実際には順番付けられたマップです。マップは型の一種で、 値をキーに関連付けます。 この型は、さまざまな使い道にあわせて最適化されます。 配列としてだけでなく、リスト (ベクター)、 ハッシュテーブル (マップの実装の一つ)、辞書、コレクション、スタック、 キュー等として使用することが可能です。 PHP の配列には他の PHP 配列を値として保持することができるため、 非常に簡単にツリー構造を表現することが可能です。 これらのデータ構造に関する説明は本マニュアルの範囲を超えるので省略しますが、 各々について、少なくとも一つは例を示します。 この分野は広範囲にまたがり、さまざまな文献が存在します。 より詳細な情報については、それらの文献を参照ください。 構文array() で指定配列 は、言語に組み込まれた array() で作成することが可能です。この構造は、 特定の数のカンマで区切られた キー => 値 の組を引数とします。 array( key => value, key2 => value2, key3 => value3, ... ) 最後の要素のあとのカンマは、書いても書かなくてもかまいません。 配列を一行で定義する場合は、ふつうは最後のカンマを省略します。つまり、 array(1, 2) のほうが array(1, 2, ) よりおすすめだということです。 しかし複数行で定義する場合は、最後のカンマをつけることが一般的です。 そうしておけば、配列の最後に要素を追加するのが容易になるからです。 PHP 5.4 以降では配列の短縮構文が追加され、 array() の代わりに [] を使えるようになりました。 例1 シンプルな配列定義
<?php key は、整数 または 文字列です。 value には任意の型を指定できます。 さらに、次のような key のキャストが発生します。
配列の宣言時に同じキーで複数の要素を指定すると、 最後に指定したものがそれまでの値を上書きします。 例2 型のキャストと値の上書きの例
<?php 上の例の出力は以下となります。 array(1) { [1]=> string(1) "d" } 上の例では、すべてのキーが 1 にキャストされます。 そして後から指定した値がどんどん前の値を上書きしていき、最終的には最後に代入された "d" だけが残ります。 PHP においては添字配列と連想配列の間に違いはなく、配列型は 1 つだけで、 同じ配列で整数のインデックスと文字列のインデックスを同時に使えます。 例3 整数と文字列のキーの混在例
<?php 上の例の出力は以下となります。 array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) } key はオプションです。省略した場合、PHP はこれまでに使われた整数のキーの中で最大のものに 1 を加えた値を使います。 例4 数値添字配列でキーを省略する例
<?php 上の例の出力は以下となります。 array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" } 一部の要素にだけキーを指定することもできます。 例5 一部の要素にだけキーを指定する例
<?php 上の例の出力は以下となります。 array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" } ごらんの通り、最後の値である "d" のキーは 7 となります。それまでにキーとして使われた最大の整数が 6 だからです。 角括弧構文による配列要素へのアクセス配列の要素へのアクセスには array[key] 構文を使います。 例6 配列の要素へのアクセス
<?php 上の例の出力は以下となります。 string(3) "bar" int(24) string(3) "foo"
PHP 5.4 以降では、関数やメソッドの返す結果を直接配列として扱えるようになりました。 以前は、いったん一次変数に代入しないと配列としては扱えませんでした。 PHP 5.5 以降では、配列リテラルをデリファレンスできるようになりました。 例7 配列のデリファレンス
<?php
角括弧構文で作成/修正明示的に値を設定することにより、既存の配列を修正することも可能です。 これは、角括弧の中にキーを指定し、配列に値を代入することにより行います。 キーを省略することも可能です。この場合、空の角括弧 ("[]") の変数名として追加してください。 $arr[キー] = 値; $arr[] = 値; // キー は 文字列 または // 整数のどちらかです。 // 値 の型は、何でもかまいません。 $arr がまだ存在しない場合は、新しく作成します。 つまり、これは配列を作成する方法のひとつでもあります。 とはいえ、この方法を使うことはおすすめしません。なぜなら、既に $arr に何らかの値 (リクエスト変数からの文字列など) が入っている場合にはその値がそのまま残り、 [] が実際には 文字列アクセス演算子 を表してしまうからです。 変数を初期化するときには、直接代入するほうがよいでしょう。
ある値を変更するには、 新しい値に値を代入します。特定のキー/値の組を削除したい場合には、 unset() を使用する必要があります。
<?php
有用な関数配列で使用する便利な関数がたくさんあります。 配列関数 の節を参照ください。
配列専用の制御構造として foreach があります。 この構造は、配列の要素に簡単に連続的にアクセスする手段を提供します。 配列ですべきこととしてはならないことなぜ、$foo[bar] は使用できないのか?連想配列の添字の前後は常に引用符で括る必要があります。 例えば、$foo[bar] ではなく $foo['bar'] を使用してください。 しかし、$foo[bar] はなぜ誤りなのでしょうか? 古いスクリプトで次のような構文を見たことがあるかもしれません。
<?php
これは間違っていますが、動作します。では、なぜ間違っているのでしょう?
それは、このコードには文字列 ('bar' - 引用符で括られている)
ではなく未定義の定数 (bar) が使用されているためです。
下位互換性の維持のため、未定義の定数は同じ名前の文字列に自動的に変換されます。
そのため、このコードは動作します。
例えば、
この具体例を以下に示します。
<?php
error_reporting() で
( 構文の節に記述したように、角括弧 ('[' および ']') の間には、式がなければなりません。これは、 次のように書くことが可能であることを意味します。
<?php これは、関数の戻り値を配列の添字として使用する例です。PHP は定数についても認識します。以下のような E_* の使用例を見たことがあるかもしれません。
<?php
最初の例の bar と全く同様に
<?php
これは、 では、なぜ $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' ということになります。
比較array_diff() と 配列演算子 を用いると、配列を比較することができます。 例PHP の配列型は、いろいろな使い方ができます。配列の強力な機能を示すため、 ここでいくつかの例を紹介します。
<?php 例8 array() の使用例
<?php 例9 コレクション
<?php 上の例の出力は以下となります。 Do you like red? Do you like blue? Do you like green? Do you like yellow? 配列を参照渡しすることでその値を直接変更できます。 例10 ループ内での要素の変更
<?php 上の例の出力は以下となります。 Array ( [0] => RED [1] => BLUE [2] => GREEN [3] => YELLOW ) この例は、1 から始まる配列を作成します。 例11 1 から始まる添字
<?php 上の例の出力は以下となります。 Array ( [1] => 'January' [2] => 'February' [3] => 'March' ) 例12 配列に代入する
<?php 配列には順番が付けられます。異なったソート関数を用いて順番を変更することも可能です。 より詳細な情報については、配列関数 を参照ください。 count() 関数を使用することで、 配列の要素数を数えることが可能です。 例13 配列のソート
<?php 配列の値は何でも良いため、その値を他の配列とすることも可能です。 これにより、再帰的な配列や多次元の配列を作成することが可能です。 例14 再帰および多次元配列
<?php 配列への代入においては、常に値がコピーされることに注意してください。 配列をリファレンスでコピーする場合には、 リファレンス演算子を使う必要があります。
<?php |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「配列」をGoogle検索
|