extract

関数の概要

PHPの extract 関数は、連想配列のキーを変数名に、対応する値を変数の値として展開(取り出し)するための関数です。これにより、配列の要素を個別の変数として扱いやすくなり、複数の変数を一度に作成したい場合に便利です。

パラメータの説明

  • array:展開したい連想配列を指定します。
  • extract_type(省略可能):変数名が既に存在する場合の動作を制御します。主な指定値は以下の通りです。
    • EXTR_OVERWRITE(デフォルト): 既存の変数を上書きする
    • EXTR_SKIP : 既存の変数があれば展開をスキップする
    • EXTR_PREFIX_SAME : 既存の変数と重複するキーにプレフィックスを追加する
    • EXTR_PREFIX_ALL : すべての展開変数にプレフィックスを追加する
    • EXTR_PREFIX_INVALID : 無効な変数名のキーのみプレフィックスを追加する
    • EXTR_IF_EXISTS : 既存の変数がある場合のみ展開する
    • EXTR_PREFIX_IF_EXISTS : 既存の変数がある場合のみプレフィックス付きで展開する
    • EXTR_REFS : 変数を参照として展開する
  • prefix(省略可能):プレフィックスを追加する際の文字列を指定します。

戻り値

展開に成功した配列の要素数を整数で返します。失敗した場合は 0 を返します。

使用例

基本的な使い方

<?php
$data = [
    "name" => "山田太郎",
    "age" => 30,
    "city" => "東京"
];

extract($data);
echo $name; // 山田太郎
echo $age;  // 30
echo $city; // 東京
?>

連想配列 $data のキー名がそのまま変数名となり、それぞれの値が代入されます。

変数上書きを防ぐ(EXTR_SKIP)

<?php
$name = "佐藤花子";
$data = [
    "name" => "山田太郎",
    "age" => 30
];

extract($data, EXTR_SKIP);
echo $name; // 佐藤花子(既存変数は上書きされない)
echo $age;  // 30
?>

既に存在する変数名「name」を上書きせずに展開したい場合に使います。

プレフィックスの追加(EXTR_PREFIX_ALL)

<?php
$data = [
    "name" => "山田太郎",
    "age" => 30
];

extract($data, EXTR_PREFIX_ALL, "user");
echo $user_name; // 山田太郎
echo $user_age;  // 30
?>

すべての変数に「user_」というプレフィックスを付けて展開し、変数名の重複や誤解を防ぎます。

参照渡しによる展開(EXTR_REFS)

<?php
$data = [
    "score" => 100
];

extract($data, EXTR_REFS);
$score += 10;
echo $data['score']; // 110
?>

変数を参照として展開するため、変数を変更すると元の配列の値も変わります。

関連する関数

  • compact:変数をキーとして連想配列を作成する関数
  • array_keys:配列のキーを取得する関数
  • array_values:配列の値を取得する関数

まとめ

extract 関数は、連想配列のキーと値を簡単に変数へ展開できる便利な関数です。テンプレートの表示や設定値の読み込み時に多用され、コードの可読性や効率化に寄与します。ただし、変数名の衝突や上書きに注意し、必要に応じて展開タイプやプレフィックスを適切に使い分けましょう。