array_merge を使った初期値設定


WordPressの内部なんかで使われてる手法なんですが、(いまさら?)
クラスとかのコンストラクタで引数のないものだけデフォルト値をセットするみたいな時に。

普通にやったらまあこんなかんじ

$org = array(‘a’ => ‘good’ , ‘b’ => ‘bad’);

func_r($org);

function func_r($org=”){
//キーがなければデフォルト値、あったらそのデータを格納
$a = (array_key_exists(‘a’, $org))?$org[‘a’]:’default_a’;
$b = (array_key_exists(‘b’, $org))?$org[‘b’]:’default_b’;
$c = (array_key_exists(‘c’, $org))?$org[‘c’]:’default_c’;
}
//$a=good,$b=bad,$c=default_c が格納される

これを array_merge を使うと

$array = array(‘a’ => ‘good’ , ‘b’ => ‘bad’);

func_s($array);

function func_s($org=”){
$def = array(‘a’ => ‘default_a’, ‘b’ => ‘default_b’, ‘c’ => ‘default_c’);
$res = array_merge($def, $org);
extract($res, EXTR_SKIP);
}
//$a=good,$b=bad,$c=default_c が格納される

行数は一緒ですが、array のデフォルト値の管理がわかりやすい!
あとなんとなく冗長じゃなくて見やすい。

動作としては、第一引数と第二引数をみくらべて
同じキー文字列があれば、そのキーに関する第二引数の値が、 第一引数の値を上書きします。
(文字通りマージする)

⇒ちなみにキーが数値の場合は追記になっちゃいますので注意
($org[1]と$def[1]をマージすると$res[1]と$res[2]に入っちゃいます)


Leave a Reply