かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP 連想配列の結合で気をつけること

キーが数字のみの連想配列をarray_merge()すると、
キーが文字列ではなく整数扱いになりキーが変わってしまうことが有る。

例えば年を選択させるセレクトボックスのoptionを作るときとか。

<?php
$year = array(
  '2014' => 2014,
  '2013' => 2013,
  '2012' => 2012,
  '2011' => 2011,
);
$def = array(
  'year' => 'year',
);
var_dump(
  array_merge($def, $year)
);

// 出力結果
# array (size=5)
# 'year' => string 'year'
# 0 => int 2014
# 1 => int 2013
# 2 => int 2012
# 3 => int 2011

キー整数で振り直されました。  
 
こんな時は 、+演算子を使って配列をくっつけてしまうと、キーが保持される。

<?php
$year = array(
  '2014' => 2014,
  '2013' => 2013,
  '2012' => 2012,
  '2011' => 2011,
);
$def = array(
  'year' => 'year',
);
var_dump(
  $def + $year
);

// 出力結果
# array (size=5)
# 'year' => string 'year'
# 2014 => int 2014
# 2013 => int 2013
# 2012 => int 2012
# 2011 => int 2011

 
+演算子で結合した時キーが被ってしまった場合は?

<?php
$year = array(
  '2014' => 2014,
  '2013' => 2013,
  '2012' => 2012,
  '2011' => 2011,
);
$def = array(
  '2013' => 'year',
);
var_dump(
  $def + $year
);

// 出力結果
# array (size=4)
# 2013 => string 'year'
# 2014 => int 2014
# 2012 => int 2012
# 2011 => int 2011

+演算子で配列結合した時と同じで先の配列の方が生きた状態に。
 
 
最近JSばかり触ってたのでPHP...忘れかけてるしちょっとメンドーにも感じる。