extract関数の使い方(連想配列に含まれるキー毎に変数を作成)

PHP で用意されている組み込み関数の一つである extract 関数の使い方です。 extract 関数は連想配列に含まれるキーを変数名、値をその変数の値として新しい変数を作成します。

(2022 年 09 月 28 日公開 / 2022 年 09 月 28 日更新)

extract関数の書式と基本的な使い方

extract 関数は次のように定義されています。

extract
int extract(array var_array [, int extract_type [, string prefix]])
引数に指定した連想配列のキーを変数名、値を変数の値として、変数を作成
します。
作成しようとする新しい変数が既に存在している場合には、extract_typeで
とprefixで指定した方式で処理を行います。

引数:
  var_array  元になる連想配列。
  extract_type  作成される変数が既にあった場合の処理方式
  prefix  変数名の先頭に付けるプレフィックス
返り値:
  作成された変数の個数

具体的な例で考えてみます。下記のような連想配列があるとします。

$array_fruit = array('apple'=>'赤','melon'=>'緑','banana'=>'黄');

上記に対して「extract($array_fruit);」を実行すると、下記の新しい変数が作成されます。

$apple = '赤';
$melon = '緑';
$banana = '黄';

このように連想配列に含まれているキーと値の組み合わせを、それぞれ変数として作成するために使われます。

作成されようとしている新しい変数が既に存在していたり、キーに変数名として無効な値が使われていた場合などの処理については、2番目の引数で指定します。取り得る値は下記のようになります。

EXTR_OVERWRITE既に存在していた場合、存在する変数が上書きされます。
EXTR_SKIP既に存在していた場合、存在する変数は上書きされません。
EXTR_PREFIX_SAME既に存在していた場合、prefix を前につけた 新しい変数となります。
EXTR_PREFIX_ALL全ての変数の前に prefix を付けます。
EXTR_PREFIX_INVALID無効または数値の変数名のみに接頭辞 prefix を付ける。
EXTR_IF_EXISTS既に存在している変数のみ、上書きして作成します。
EXTR_PREFIX_IF_EXISTS既に存在している変数のみ、プレフィックスを付けて作成します。
EXTR_REFS変数を参照として展開します。

値を省略した場合は「EXTR_OVERWRITE」となります。またプレフィックスを付ける場合、例えば変数名が「$abc」、プレフィックスが「'pre'」だった場合、新しい変数名は「$pre_abc」となります。

サンプルコード

では実際に試してみます。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$array_fruit = array('apple'=>'赤','melon'=>'緑','banana'=>'黄');
extract($array_fruit);

print('$apple='.$apple.'<br>');
print('$melon='.$melon.'<br>');
print('$banana='.$banana.'<br>');

$array_fruit2 = array('apple'=>'red','melon'=>'green','banana'=>'yellow');
extract($array_fruit2, EXTR_SKIP);

print('$apple='.$apple.'<br>');
print('$melon='.$melon.'<br>');
print('$banana='.$banana.'<br>');

$array_fruit3 = array('apple'=>'red','melon'=>'green','banana'=>'yellow');
extract($array_fruit3, EXTR_PREFIX_SAME, 'tmp');

print('$tmp_apple='.$tmp_apple.'<br>');
print('$tmp_melon='.$tmp_melon.'<br>');
print('$tmp_banana='.$tmp_banana.'<br>');

?>
</body>
</html>

上記のファイルを Web サーバに設置しブラウザ経由で見ると下記のように表示されます。

extractのテスト

-- --

PHP で用意されている組み込み関数の一つである extract 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。