連想配列の先頭に項目を追加しようとしています。これを行う最善の方法はarray_mergeを使用することだと思いましたが、奇妙な結果が得られました。mysql データベースから製品の ID と名前を取得すると、次のように連想配列として返されます (返される実際のデータではなく、データがおおよそどのように見えるかを表すこの質問のサンプル データです)。
$products = array (1 => 'Product 1', 42 => 'Product 42', 100 => 'Product 100');
これは、キーを値に関連付けるドロップダウンを作成するために html ヘルパーに送信され、配列項目の値がドロップダウン選択コントロールのテキストとして設定されます。最初の項目は、キーが 0 の「Please Select」のようなものにする必要があるため、次のようにしました。
$products = array_merge(array(0 => "Select a product" ), $products);
結果の配列は次のようになります。
array(
0 => 'Select a product',
1 => 'Product 1',
2 => 'Product 42',
3 => 'Product 100'
);
私が本当に望んでいたのは、連想配列のキーを失わないことでした。私が試した方法でarray_mergeを連想配列で適切に使用できると言われましたが、キーがintであるため、配列を真の連想配列として扱っておらず、上記のように圧縮していないと思います。
問題は、array_merge 関数が項目のキーを変更するのはなぜですか? これを行わないようにすることはできますか?または、配列の先頭に新しい項目を追加するために、私がやろうとしていることを達成する別の方法はありますか?