extract()関数を用いると配列のKeyを変数名に、値をValueとして変換してくれる。
フレームワークなどでよく用いられる。
以下使用例。
$array = array( 'foo' => 'hoge', 'bar' => 'fuga', 'baz' => 'piyo' ); extract($array); var_dump($foo); var_dump($bar); var_dump($baz); ↓ string(4) "hoge" string(4) "fuga" string(4) "piyo"
変換した変数がすでに定義されていた場合も、変換後の値で上書きされるので注意。
$foo = 'GEKIOKO_PUNPUN_MARU'; $array = array( 'foo' => 'hoge', 'bar' => 'fuga', 'baz' => 'piyo' ); // 第2引数の「EXTR_OVERWRITE」は明示的に上書きモードで固定するためのもの。 // 指定しなければ通常このモードで動作する(模様)。 extract($array, EXTR_OVERWRITE); var_dump($foo); var_dump($bar); var_dump($baz); ↓ string(4) "hoge" string(4) "fuga" string(4) "piyo"
変数の上書きを許可したくない場合は、第2引数へ「EXTR_SKIP」を渡せばよい。
$foo = 'GEKIOKO_PUNPUN_MARU'; $bar = ''; $array = array( 'foo' => 'hoge', 'bar' => 'fuga' ); extract($array, EXTR_SKIP); var_dump($foo); var_dump($bar); ↓ string(19) "GEKIOKO_PUNPUN_MARU" string(0) ""
「EXTR_PREFIX_SAME」を渡すと、変数の衝突が起きた際、第3引数に指定した値をプレフィックスとして先頭に追加してくれる。
$foo = 'GEKIOKO_PUNPUN_MARU'; $bar = ''; $array = array( 'foo' => 'hoge', 'bar' => 'fuga' ); extract($array, EXTR_PREFIX_SAME, 'pre'); var_dump($foo); var_dump($bar); // [prefix] + [_] + [key]、というように連結される var_dump($pre_foo); var_dump($pre_bar); ↓ string(19) "GEKIOKO_PUNPUN_MARU" string(0) "" string(4) "hoge" string(4) "fuga"
「EXTR_PREFIX_ALL」を渡すと、衝突の有無に関わらず全てがプレフィックス付きの変数となる。
$array = array( 'foo' => 'hoge', 'bar' => 'fuga' ); extract($array, EXTR_PREFIX_ALL , 'pre'); var_dump($pre_foo); var_dump($pre_bar); ↓ string(4) "hoge" string(4) "fuga"