2007年6月22日金曜日

 

【PHP】変数名をキーにして配列を変数に変換する関数:extract

int extract ( array $var_array [, int $extract_type [, string $prefix]] )
連想配列 var_array を引数とし、そのキーを変数名、値を変数の値として処理する

自動的にキーの名前で変数を作るので、しっかりと設計してプログラムしてないと変数名がかぶる事が起こる(衝突)。
その時、どう処理するかを指定するのが第二引数 $extract_type 。以下が指定できる主な値。

EXTR_OVERWRITE 衝突があった場合、存在する変数が上書きされます。 EXTR_SKIP 衝突があった場合、存在する変数は上書きされません。 EXTR_PREFIX_SAME 衝突があった場合、prefix を前につけた新しい変数となります。 EXTR_PREFIX_ALL 全ての変数の前に prefix を付けます。PHP 4.0.5 以降、接頭辞を数値とすることも可能です

他の指定できる値についてはマニュアルを参照
衝突が起きて、別の変数名にしたい時には第三引数 $prefix の文字列とキーをくっつけた変数名で処理する。

$array = array("color"=>"RED",
                                     "size"  =>"SMALL",
                                     "price"=>"100");

上記の配列があった場合


$num=extract($array);

この様に実行すると


$num=3
$color=RED
$size=SMALL
$price=100

以下を実行した場合も同様。


$color="WHITE";
extract($array,EXTR_OVERWRITE );

次に、EXTR_SKIP を指定した場合は $color が既にあるので上書きされない。


$color="WHITE";
extract($array,EXTR_SKIP);

$color=WHITE
$size=SMALL
$price=100

EXTR_PREFIX_SAME を指定すると、衝突した値だけ第三引数を接頭語にした変数名になる。


$color="WHITE";
extract($array,EXTR_PREFIX_SAME,"var");

$color=WHITE
$var_color="RED"
$size=SMALL
$price=100

EXTR_PREFIX_ALL を指定すると全てが第三引数を接頭語にした変数名になる。


$color="WHITE";
extract($array,EXTR_PREFIX_ALL ,"var");

$color=WHITE
$var_color="RED"
$var_size=SMALL
$var_price=100

フォームからPOSTやGETで値を受ける時に便利なんですが

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

これなら良いのでしょうか。責任は持てませんが。


extract($_POST,EXTR_SKIP);

参照

PHP マニュアル
http://jp.php.net/manual/ja/function.extract.php
PHPプロ!マニュアル
http://www.phppro.jp/phpmanual/php/function.extract.html

ラベル:


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google