PHPのextract()
関数は、配列を複数の変数に展開する組み込み関数。配列要素のキーを変数名に、配列要素の値を変数の値とする。
定義
パラメータ
- 配列型 &$var_array
複数の変数に展開したい配列を指定。
- 整数型 $extract_type
-
- EXTR_OVERWRITE: 既に同名の変数が存在する場合、上書きする。
- EXTR_SKIP: 既に同名の変数が存在する場合、上書きしない。
- EXTR_PREFIX_SAME: 既に同名の変数が存在する場合、変数名に接頭辞「文字列型 $prefix」を付け展開する。
- EXTR_PREFIX_ALL: 全ての変数名に、接頭辞「文字列型 $prefix」を付ける。
- EXTR_PREFIX_INVALID: 数値キーなど、変数名として無効な場合、変数名に接頭辞「文字列型 $prefix」を付ける。
- EXTR_IF_EXISTS: 既に同名の変数が存在する場合のみ、上書きで展開する。同名の変数が存在しない場合は、展開しない。
- EXTR_PREFIX_IF_EXISTS: 既に同名の変数が存在する場合のみ、変数名に接頭辞「文字列型 $prefix」を付け展開する。同名の変数が存在しない場合は、展開しない。
- EXTR_REFS: 参照渡しで、展開する。
- 文字列型 $prefix
変数名に付ける接頭辞。
戻り値
整数。
配列から変数に展開した数。
構文
配列を複数の変数に展開
「配列」を複数の変数に展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
配列を複数の変数に展開(EXTR_OVERWRITE)
「配列」を複数の変数に展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
既に同名の変数が存在する場合、上書きする。
配列を複数の変数に展開(EXTR_SKIP)
「配列」を複数の変数に展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
既に同名の変数が存在する場合、上書きしない。
配列を複数の変数に展開(EXTR_PREFIX_SAME, 接頭辞)
「配列」を複数の変数に展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
既に同名の変数が存在する場合、変数名に「接頭辞」を付け展開する。
配列を複数の変数に展開(EXTR_PREFIX_ALL)
「配列」を複数の変数に展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
全ての変数名に、「接頭辞」を付ける。
配列を複数の変数に展開(EXTR_PREFIX_INVALID)
「配列」を複数の変数に展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
数値キーなど、変数名として無効な場合、変数名に「接頭辞」を付ける。
配列を複数の変数に展開(EXTR_IF_EXISTS)
既に同名の変数が存在する場合のみ、上書きで展開し、展開した数を返す。同名の変数が存在しない場合は、展開しない。
配列要素のキーを変数名に、配列要素の値を変数の値とする。
配列を複数の変数に展開(EXTR_PREFIX_IF_EXISTS)
既に同名の変数が存在する場合のみ、変数名に「接頭辞」を付け展開し、展開した数を返す。同名の変数が存在しない場合は、展開しない。
配列要素のキーを変数名に、配列要素の値を変数の値とする。
配列を複数の変数に展開(EXTR_REFS)
「配列」を複数の変数に参照渡しで展開し、展開した数を返す。配列要素のキーを変数名に、配列要素の値を変数の値とする。
既に同名の変数が存在する場合、上書きする。
サンプル
連想配列を展開
$red = "レッド";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray );
echo '$red: ' . "{$red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$green: ' . "{$green}<br />";
?>
↓↓↓出力結果↓↓↓
$blue: 青
$green: 緑
連想配列を展開(EXTR_OVERWRITE)
$red = "レッド";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_OVERWRITE );
echo '$red: ' . "{$red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$green: ' . "{$green}<br />";
?>
↓↓↓出力結果↓↓↓
$blue: 青
$green: 緑
連想配列を展開(EXTR_SKIP)
$red = "レッド";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_SKIP );
echo '$red: ' . "{$red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$green: ' . "{$green}<br />";
?>
↓↓↓出力結果↓↓↓
$blue: 青
$green: 緑
連想配列を展開(EXTR_PREFIX_SAME)
$blue ="ブルー";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_PREFIX_SAME, "color" );
echo '$red: ' . "{$red}<br />";
echo '$color_red: ' . "{$color_red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$color_blue: ' . "{$color_blue}<br />";
echo '$green: ' . "{$green}<br />";
echo '$color_green: ' . "{$color_green}<br />";
?>
↓↓↓出力結果↓↓↓
$color_red:
$blue: ブルー
$color_blue: 青
$green: 緑
$color_green:
連想配列を展開(EXTR_PREFIX_ALL)
$blue ="ブルー";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_PREFIX_ALL, "color" );
echo '$red: ' . "{$red}<br />";
echo '$color_red: ' . "{$color_red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$color_blue: ' . "{$color_blue}<br />";
echo '$green: ' . "{$green}<br />";
echo '$color_green: ' . "{$color_green}<br />";
?>
↓↓↓出力結果↓↓↓
$color_red: 赤
$blue: ブルー
$color_blue: 青
$green:
$color_green: 緑
配列を展開(EXTR_PREFIX_INVALID)
$varArray = array( "赤", "青", "緑" );
extract( $varArray, EXTR_PREFIX_INVALID, "color" );
echo '$color_0: ' . "{$color_0}<br />";
echo '$color_1: ' . "{$color_1}<br />";
echo '$color_2: ' . "{$color_2}<br />";
?>
↓↓↓出力結果↓↓↓
$color_1: 青
$color_2: 緑
連想配列を展開(EXTR_IF_EXISTS)
$blue ="ブルー";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_IF_EXISTS );
echo '$red: ' . "{$red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$green: ' . "{$green}<br />";
?>
↓↓↓出力結果↓↓↓
$blue: 青
$green:
連想配列を展開(EXTR_PREFIX_IF_EXISTS)
$blue ="ブルー";
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_PREFIX_IF_EXISTS, "color" );
echo '$red: ' . "{$red}<br />";
echo '$color_red: ' . "{$color_red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$color_blue: ' . "{$color_blue}<br />";
echo '$green: ' . "{$green}<br />";
echo '$color_green: ' . "{$color_green}<br />";
?>
↓↓↓出力結果↓↓↓
$color_red:
$blue: ブルー
$color_blue: 青
$green:
$color_green:
連想配列を展開(EXTR_REFS)
連想配列を展開し定義した変数を、再定義すると、連想配列の要素の値も変わることに注目。
$varArray = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
extract( $varArray, EXTR_REFS );
echo '$red: ' . "{$red}<br />";
echo '$blue: ' . "{$blue}<br />";
echo '$green: ' . "{$green}<br />";
$blue = "ブルー";
print_r( $varArray );
?>
↓↓↓出力結果↓↓↓
$blue: 青
$green: 緑
Array ( [red] => 赤 [blue] => ブルー [green] => 緑 )