PHPで連想配列を複数の変数に展開する関数extract

使い方によってはめちゃくちゃ便利なPHPの関数extractについて。

PHP: extract – Manual

※ このブログは、 PHPで複数の変数をまとめて連想配列にする関数compact と対になっています。

連想配列の要素を取り出す

extractは一言で説明すると、「連想配列を複数の変数に展開する関数」です。

$user = array(
	'user_id' => 1,
	'screen_name' => 'katty0324',
	'age' => 24
);

こんな風に連想配列に、キーと値のペアで色々な情報が入っていることって多いですよね。このままでは使いにくいので、連想配列のキーと同じ名前の変数に代入し直すと後で使いやすいです。

$user_id = $user['user_id'];
$screen_name = $user['screen_name'];
$age = $user['age'];

でも、少し面倒です。

これを勝手にやってくれるのがextract

extract関数を使うと同様のことを一瞬でやってくれます。(一瞬というのはコード的な意味であって、処理時間のことではありません)

extract($user);

使い所は関数などで変数をまとめて渡された時

次のように連想配列を丸ごと関数に渡したくなる時ってありますよね。

$user_id = 1;
$screen_name = 'katty0324';
$age = 24;
 
outputUser(array(
	'user_id' => $user_id,
	'screen_name' => $screen_name,
	'age' => $age
));

呼び出された関数内で連想配列の中身を取り出す

この時、呼び出された関数の中で、連想配列の値をひとつずつ取り出す必要があります。

function outputUser($user) {
	if (isset($user['user_id']))
		echo "ID: {$user[user_id]}\n";
	if (isset($user['screen_name']))
		echo "Screen name: {$user[screen_name]}\n";
	if (isset($user['age']))
		echo "Age: {$user[age]}\n";
}

ここで引数で渡された連想配列をそのまま使うとソースコードがごちゃつくので、extract関数を使って連想配列を展開してしまうと良いです。

function outputUser($user) {
	extract($user);
	if (isset($user_id))
		echo "ID: {$user_id}\n";
	if (isset($screen_name))
		echo "Screen name: {$screen_name}\n";
	if (isset($age))
		echo "Age: {$age}\n";
}

すっきりしますよねー!

About katty0324

One comment

Leave a Reply

Scroll To Top