【发布时间】:2011-07-11 03:53:05
【问题描述】:
我正在尝试将一个项目添加到关联数组的开头。我认为最好的方法是使用 array_merge,但我有一些奇怪的后果。我从 mysql 数据库中获取产品的 id 和 Name,它作为关联数组返回,如下所示(不是返回的实际数据,而是代表数据大致样子的该问题的示例数据):
$products = array (1 => 'Product 1', 42 => 'Product 42', 100 => 'Product 100');
这将被发送到一个 html 帮助程序以创建一个将键与值相关联的下拉列表,并将数组项的值设置为下拉选择控件中的文本。我需要第一项类似于“请选择”,键为 0,所以我这样做了:
$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 与关联数组一起使用,但是,我相信因为我的键是 ints 它不会将数组视为真正的关联数组并压缩它们如上图所示。
问题是:为什么 array_merge 函数会改变项目的键?我可以阻止它这样做吗?或者是否有另一种方法可以让我完成我想要做的事情,在数组的开头添加新项目?
【问题讨论】:
-
我遇到了与 array_merge() 完全相同的问题。我不确定这是否是一个错误,或者我们正试图以一种无意的方式使用它。解决方案,只需运行一个快速的 foreach 循环并重建您的数组。以 $myarray = array(0 => 'Select a product'); 开头
标签: php associative-array array-merge