Как ни странно:
$years = range(14,20);
$foo = array("" => "-");
$bar = array_combine($years, $years);
$result = array_merge($foo, $bar);
дает:
array(8) {
[""]=>
string(1) "-"
[0]=>
int(14)
[1]=>
int(15)
[2]=>
int(16)
[3]=>
int(17)
[4]=>
int(18)
[5]=>
int(19)
[6]=>
int(20)
}
Что правильно (очевидно, значения для этого ответа изменены). Ваш результат заключается в том, что объединение массива $years
добавляется к значению по умолчанию в виде целого массива, а не объединяет его.