PHPにて配列を変数に変換する方法。

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"