とりあえずの備忘録

主にパソコンやインターネットに関するメモ

PHP 連想配列を変数に展開する

extract関数に連想配列を渡して変数に展開する

<?php
//連想配列
$user_array = array(
 'name' => 'yamada',
 'address' => 'tokyo',
 'age' => '23'
);

//変数に展開
extract($user_array);

//出力
echo '$name = ' . $name . '<br />';
echo '$address = ' . $address . '<br />';
echo '$age = ' . $age . '<br />';
?>

「出力結果」

$name = yamada
$address = tokyo
$age = 23

extract関数に連想配列を渡して接頭辞を付加した変数に展開する

<?php
//連想配列
$user_array = array(
 'name' => 'tanaka',
 'address' => 'chiba',
 'age' => '28'
);

//接頭辞にuserを付加した変数に展開
extract($user_array, EXTR_PREFIX_ALL, 'user');

//出力
echo '$user_name = ' . $user_name . '<br />';
echo '$user_address = ' . $user_address . '<br />';
echo '$user_age = ' . $user_age . '<br />';
?>

「出力結果」

$user_name = tanaka
$user_address = chiba
$user_age = 28

接頭辞を付けると展開される変数の名前は、[接頭辞]_[キー]になる。

extract関数に添字配列を渡して変数に展開する

<?php
//配列
$name_array = array('sato', 'suzuki', 'watanabe');

//変数に展開
extract($name_array, EXTR_PREFIX_INVALID, 'user');

//出力
echo '$user_0 = ' . $user_0 . '<br />';
echo '$user_1 = ' . $user_1 . '<br />';
echo '$user_2 = ' . $user_2 . '<br />';
?>

「出力結果」

$user_0 = sato
$user_1 = suzuki
$user_2 = watanabe

添字配列には、必ず"EXTR_PREFIX_ALL"か"EXTR_PREFIX_INVALID"を指定して接頭辞を付ける。

extract関数を$_GET、$_POST等の入力データに使用しない

<?php
$a = 'jugem';
extract($_POST); //$_POST['a']='no'が存在する
echo $a;
?>

「出力結果」

no

上のサンプルのように変数が上書きされてしまう可能性がある。
"EXTR_SKIP"を指定すると上書きを防げますが、マニュアルには赤い枠の警告で使用しないように書いてありました。

それよりも面倒くさがらずに

//POSTデータを取得
$user_name = $_POST['name']; //ユーザー名
$user_address = $_POST['address']; //住所
$user_age = $_POST['age']; //年齢

のように一個ずつ変数に代入すれば、スクリプトを目視すれば、どんなデータが送られてくるのかが掴めるので、そうしたほうがよいとのこと。

 

関連エントリーはこちら。