PHP マニュアル
前のページ |  | 次のページ

# extract

(PHP 3 >= 3.0.7, PHP 4, PHP 5)

extract -- 配列からシンボルテーブルに変数をインポートする

## 説明

int extract ( array var_array [, int extract_type [, string prefix]] )

この関数は、配列から現在のシンボルテーブルに変数をインポートするために使用されます。 この関数は連想配列 `var_array` を引数とし、そのキーを変数名、値を変数の値として処理します。 各キー/値の組に関して、`extract_type` および `prefix` パラメータに基づき、 現在のシンボルテーブルに変数を一つ作成します。

> 注意: バージョン 4.0.5 以降、この関数は展開された変数の数を返します。

> 注意: `EXTR_IF_EXISTS` と `EXTR_PREFIX_IF_EXISTS` はバージョン 4.2.0 で導入されました。

> 注意: `EXTR_REFS` はバージョン 4.3.0 で導入されました。

extract() は、各キーについて変数名として有効であるかどうか、 そして、シンボルテーブルの既存の変数と衝突しないかどうかを確認します。 無効または数値キーおよび衝突に関する対処法は、 `extract_type` で定義されます。 これは以下の値のどれかとなります。

`EXTR_OVERWRITE`

  衝突があった場合、存在する変数が上書きされます。

`EXTR_SKIP`

  衝突があった場合、存在する変数は上書きされません。

`EXTR_PREFIX_SAME`

  衝突があった場合、`prefix` を前につけた新しい変数となります。

`EXTR_PREFIX_ALL`

  全ての変数の前に `prefix` を付けます。PHP 4.0.5 以降、接頭辞を数値とすることも可能です。

`EXTR_PREFIX_INVALID`

  無効または数値の変数名のみに接頭辞 `prefix` を付ける。このフラグは、PHP 4.0.5 で追加されました。

`EXTR_IF_EXISTS`

  カレントのシンボルテーブルに既に存在する場合にのみ上書きします。 例えば $_REQUEST 以外にあなたが定義した変数のみを展開し 有効な変数としたいような場合に有用です。このフラグは PHP 4.2.0 で追加されました。

`EXTR_PREFIX_IF_EXISTS`

  同じ変数だが接頭辞をつけていないバージョンの変数が カレントのシンボルテーブルに存在する場合にのみ 変数を生成します。このフラグは PHP 4.2.0 で追加されました。

`EXTR_REFS`

  変数を参照として展開します。 これはインポート済みの変数が、 `var_array` パラメータの値に常に参照付けられることを意味します。 このフラグを単独で使用するか、 あるいは`extract_type`と和算することにより、 他のフラグとそれを組み合わせることができます。 このフラグは PHP 4.3.0 で追加されました。

`extract_type` が指定されない場合、 `EXTR_OVERWRITE` とみなされます。

`prefix` は、 `extract_type` が `EXTR_PREFIX_SAME`、`EXTR_PREFIX_ALL`、 `EXTR_PREFIX_INVALID` あるいは `EXTR_PREFIX_IF_EXISTS` の場合にのみ必要であることに注意してください。 接頭辞を付けた変数名が有効な変数名でない場合、 この変数はシンボルテーブルにインポートされません。接頭辞は、 アンダースコア文字で配列のキーから自動的に分割されます。

extract() は、 各キーが有効な変数名からなるかどうかを確認し、 有効な変数名である場合のみインポート処理を行います。

警告
extract() をユーザー入力 ($_GET, ...) のような信頼できないデータについて使用しないでください。 もし行う場合、例えば register_globals を信頼しているような古いコードを一時的に実行したい場合、 `EXTR_SKIP` のような `extract_type` の値が上書きされていないことを確認してください。そして `php.ini` の variables_order で定義されたものと同じ順で展開すべきであることに留意してください。

extract の使用例としては、シンボルテーブルに wddx_deserialize() から返された連想配列を インポートすることが考えられます。

例 1. extract() の例

`<?php /* $var_array はwddx_deserializeから返された配列と仮定します */ $size = "large"; $var_array = array("color" => "blue", "size" => "medium", "shape" => "sphere"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); echo "$color, $size, $shape, $wddx_size\n"; ?>`

上の例の出力は以下となります。

    blue, large, sphere, medium

`EXTR_PREFIX_SAME` を指定したため、`$size` は上書きされず、`$wddx_size` が作成されます。 `EXTR_SKIP` が指定された場合、$wddx_sizeは作成されません。 `EXTR_OVERWRITE` の場合は、`$size` の値は "medium" となります。 `EXTR_PREFIX_ALL` の場合は新規の変数 `$wddx_color`, `$wddx_size`, `$wddx_shape` が作成されます。

連想配列を使用する必要があります。`EXTR_PREFIX_ALL` または `EXTR_PREFIX_INVALID` を使用しない限り、 数値添字の配列には結果は出力されません。

compact() も参照ください。

前のページ | ホーム | 次のページ
end | 上に戻る | in_array