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_EXISTSEXTR_PREFIX_IF_EXISTSはversion 4.2.0で導入されました。

注意: EXTR_REFSはversion 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以外にあなたが定義した変数のみを展開し 有効な変数としたいような場合に有用です。このフラグは PHP4.2.0で追加されました。

EXTR_PREFIX_IF_EXISTS

同じ変数だが接頭辞をつけていないバージョンの変数が カレントのシンボルテーブルに存在する場合にのみ 変数を生成します。このフラグはPHP4.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 の場合にのみ必要であることに 注意してください。接頭辞を付けた変数名が有効な変数名でない場合、こ の変数はシンボルテーブルにインポートされません。

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

警告

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

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()も参照ください。