php array_merge 关联数组

2022-08-30 15:54:44

我正在尝试将一个项目附加到关联数组的开头。我认为最好的方法是使用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功能会更改项目的键?我可以阻止它这样做吗?或者,是否有另一种方法可以让我完成我正在尝试执行的操作,即在数组的开头添加新项?


答案 1

文档中

如果要将数组元素从第二个数组追加到第一个数组,同时不覆盖第一个数组中的元素并且不重新编制索引,请使用 + 数组联合运算符

使用联合运算符时,将保留第一个数组参数中的键,因此反转参数的顺序并使用联合运算符应该可以满足您的需要:+

$products = $products + array(0 => "Select a product");

答案 2

只是为了好玩

$newArray = array_combine(array_merge(array_keys($array1),
                                      array_keys($array2)
                                     ),
                          array_merge(array_values($array1),
                                      array_values($array2)
                                     )
                         );

推荐