PHP 連想配列から変数を作成する (extract)

目次

extract関数とは

  • 連想配列のキーを変数名にして展開する 関数です。
  • compact() の逆の働きをします。

 

extract関数で連想配列から変数を作成する

<?php

$ar1 = ['c1'=>'A',
		'c2'=>'B',
		'c3'=>'C'
	];

extract($ar1);

echo $c1; //A
echo $c2; //B
echo $c3; //C

?>

8行目は、extract関数で連想配列を変数にしています。

 

変数の衝突があった場合、変数に別名を付ける

extract関数の

2つめの引数は、関数実行時にすでに変数が存在してい場合にどのような挙動をするかを指定します。

3つめの引数は、2つめの引数を指定した時でprefixを使用する場合、どのようなprefixをつけるか等に使用します。

<?php

$c1 = 1;
$c2 = 1;

$ar1 = ['c1'=>'A',
		'c2'=>'B',
		'c3'=>'C'
	];

extract($ar1,EXTR_PREFIX_SAME,"pre");

echo $pre_c1; //A
echo $pre_c2; //B
echo $c3; //C

?>

3,4行目は、変数です。
6~9行目は、連想配列です。
11行目は、extract関数で連想配列を変数にしています。EXTR_PREFIX_SAMEは、変数名の衝突があった場合、3つめの引数を変数名の前につけて新しい変数にします。
13,14行目は、変数が衝突するので、11行目に指定したpreとアンダスコアがついた変数になっています。
15行目は、変数は衝突しないので、連想配列のキーのままの変数名になっています。

 

2つめの引数のフラグの一覧

extract($array, EXTR_OVERWRITE); デフォルト。既存の変数を上書きする
extract($array, EXTR_SKIP); 既存の変数は上書きしない
extract($array, EXTR_PREFIX_ALL, "p"); 全ての変数に接頭辞をつける
extract($array, EXTR_PREFIX_SAME, "dup"); 衝突した変数にだけ接頭辞をつける

https://www.php.net/manual/ja/function.extract.php

 

関連の記事

PHP 変数から連想配列を作成する (compact)

△上に戻る