変数名を使った配列操作

extract()

extract()の構文は「extract(対象配列 [, 展開時の対処, [プレフィックス]]);」です。
extract()は対象配列のキーを変数名、それに対応する値を変数の値として処理します。数字のキーを使うには、プレフィックスをつける「EXTR_PREFIX_ALL」か「EXTR_PREFIX_INVALID 」を第二引数に指定しなければなりません。デフォルトは、「EXTR_OVERWRITE」です。返り値はシンボルテーブルにインポートされた変数の数ですが、キーから作成された変数にはキーに対応する値が変数値に入っています。

以下は、第二引数に指定できるフラグ。
「EXTR_OVERWRITE」は同名の変数があれば上書きします。
「EXTR_SKIP」は同名の変数があれば上書きしません。
「EXTR_PREFIX_SAME」は同名の変数があればプレフィックスを追加。
「EXTR_PREFIX_ALL」全ての変数名にプレフィックスをつけます。
「EXTR_PREFIX_INVALID」無効もしくは数値の変数名にだけプレフィックス追加。
「EXTR_IF_EXISTS」同じ変数名がある時だけ要素を展開。
「EXTR_PREFIX_IF_EXISTS」は同じ変数名があればプレフィックスを追加して展開。
「EXTR_REFS」は変数をリファレンスとして展開。
これらはビット演算子で複数設定することが可能です。
第四引数は、第三引数が「EXTR_PREFIX_SAME」「EXTR_PREFIX_ALL」「EXTR_PREFIX_INVALID」「EXTR_PREFIX_IF_EXISTS」を指定した場合に必要なる引数です。

1
2
3
$a = array("b1" => "BB","c1" => "CC","d1" => "DD");
echo extract($a).'。';
echo $b1.':'.$c1.':'.$d1;
実行結果:3。BB:CC:DD

compact()

compact()の構文は「compact(変数名1 [, 変数名2・・・]);」です。
compact()は変数名とその変数に入れられている値から、新たな一つの配列を作成します。ここで言う変数名とは、例えば「$name」から「$」を取り除いた「name」の部分のことです。また、変数名に配列を指定することも可能です。compact()は再帰的に処理します。分かりやすく言えばcompact()関数は、extract()関数の逆のことをします。

1
2
3
4
5
6
7
8
9
10
$a = "AAA";
$b = "BBB";
$c = "CCC";
//
$com = compact('a', 'b', 'c');
print_r($com);
//
$array = array('a', 'b', 'c');
$com = compact($array);
print_r($com);
実行結果:
Array
(
[a] => AAA
[b] => BBB
[c] => CCC
)
Array
(
[a] => AAA
[b] => BBB
[c] => CCC
)