配列からシンボルテーブルに変数をインポートする

# extract

(PHP 4, PHP 5, PHP 7, PHP 8)

extract — 配列からシンボルテーブルに変数をインポートする

### 説明

function extract(array `&$array`, int `$flags` = `EXTR_OVERWRITE`, string `$prefix` = ""): int

配列から シンボルテーブル に変数をインポートします。

各キーについて変数名として有効であるかどうか、 そして、シンボルテーブルの既存の変数と衝突しないかどうかを確認します。

警告

ユーザーの入力、例えば $_GET や $_FILES のような、 信頼できないデータに extract() を使用しないでください。

### パラメータ

`array`

  この関数は連想配列 `var_array` を引数とし、そのキーを変数名、値を変数の値として処理します。 各キー/値の組に関して、`flags` および `prefix` パラメータに基づき、 現在のシンボルテーブルに変数を一つ作成します。

  連想配列を使用する必要があります。`EXTR_PREFIX_ALL` または `EXTR_PREFIX_INVALID` を使用しない限り、 数値添字の配列には結果は出力されません。

`flags`

  無効または数値キーおよび衝突に関する対処法は、 `flags` で定義されます。 これは以下の値のどれかとなります。

  `EXTR_OVERWRITE`
    衝突があった場合、存在する変数が上書きされます。
  `EXTR_SKIP`
    衝突があった場合、存在する変数は上書きされません。
  `EXTR_PREFIX_SAME`
    衝突があった場合、`prefix` を前につけた新しい変数となります。
  `EXTR_PREFIX_ALL`
    全ての変数の前に `prefix` を付けます。
  `EXTR_PREFIX_INVALID`
    無効または数値の変数名のみに接頭辞 `prefix` を付けます。
  `EXTR_IF_EXISTS`
    現在のシンボルテーブルに既に存在する場合にのみ上書きします。 例えば $_REQUEST からあなたが定義した変数のみを展開し 有効な変数としたいような場合に有用です。
  `EXTR_PREFIX_IF_EXISTS`
    同じ変数だが接頭辞をつけていないバージョンの変数が 現在のシンボルテーブルに存在する場合にのみ 変数を生成します。
  `EXTR_REFS`
    変数を参照として展開します。 これはインポート済みの変数が、 `array` パラメータの値に常に参照付けられることを意味します。 このフラグを単独で使用するか、 あるいは`flags`と和算することにより、 他のフラグとそれを組み合わせることができます。

  `flags` が指定されない場合、 `EXTR_OVERWRITE` とみなされます。

`prefix`

  `prefix` は、 `flags` が `EXTR_PREFIX_SAME`、`EXTR_PREFIX_ALL`、 `EXTR_PREFIX_INVALID` あるいは `EXTR_PREFIX_IF_EXISTS` の場合にのみ必要であることに注意してください。 接頭辞を付けた変数名が有効な変数名でない場合、 この変数はシンボルテーブルにインポートされません。接頭辞は、 アンダースコア文字で配列のキーから自動的に分割されます。

### 戻り値

シンボルテーブルにインポートした変数の数を返します。

### 例

例1 extract() の例

    <?php
    $size = "large";
    $var_array = array(
        "color" => "blue",
        "size"  => "medium",
        "shape" => "sphere"
    );

    extract($var_array, EXTR_PREFIX_SAME, "wddx");

    echo "$color, $size, $shape, $wddx_size\n";

    ?>

上の例の出力は以下となります。

    blue, large, sphere, medium

`EXTR_PREFIX_SAME` を指定したため、$size は上書きされず、$wddx_size が作成されます。 `EXTR_SKIP` が指定された場合、$wddx_size は作成されません。 `EXTR_OVERWRITE` の場合は、$size の値は "medium" となります。 `EXTR_PREFIX_ALL` の場合は新規の変数 $wddx_color, $wddx_size, $wddx_shape が作成されます。

### 注意

警告

extract() をユーザー入力 ($_GET や $_FILES など) のような信頼できないデータについて使用しないでください。 もし行う場合、 `EXTR_SKIP` のような `flags` の値が上書きされていないことを確認してください。そして php.ini の variables_order で定義されたものと同じ順で展開すべきであることに留意してください。

### 参考

- compact() - 変数名とその値から配列を作成する
- list() - 配列と同様の形式で、複数の変数への代入を行う

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open