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

広告

連想配列に含まれるキーを変数名、値をその変数の値として新しい変数を作成します。

引数に指定した連想配列のキーを変数名、値を変数の値として、変数を作成
します。
作成しようとする新しい変数が既に存在している場合には、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」となります。

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

functest30.php

<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>

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

extractのテスト

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)