IDをkeyにした配列をarray_mergeしてバグを出しました

やったこと

<?php
$a = array('104' => 'a', '257' => 'b', '245' => 'c');
$b = array('477' => 'd', '502' => 'e', 'f4c' => '600');

var_dump(array_merge($a, $b)); // <1>
var_dump($a + $b); // <2>

けっか

<1>

array(6) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
  [4]=>
  string(1) "e"
  ["f4c"]=>
  string(3) "600"
}

<2>

array(6) {
  [100]=>
  string(1) "a"
  [200]=>
  string(1) "b"
  [300]=>
  string(1) "c"
  [400]=>
  string(1) "d"
  [500]=>
  string(1) "e"
  ["f4c"]=>
  string(3) "600"
}

既存に機能追加することになった。

array( key => array(データ) , ...)

な配列がもともとあったので、
同じ形式の配列をもう1つ作ってarray_mergeした。

結果、↑<1>の状態になってちゃんと読み込まれてないままリリースされ、土下座したtodayでした。

array_mergeはホント気をつけて使わねばならんという教訓。
ググると配列 + 配列も罠があるらしいことがわかったので、
確実に望んだ形の配列を得たいときは、

foreach(array as $key => $val)

で明示的に処理したほうがいい。



(テストデータに不備があってテスト環境で検出できなかったのも本当に悔しい。
 ってかテスト書けば検出できた。
 次はテスト書かないカルチャーの場所でもテスト書かせてもらうお願いをするなどしたい。)