php array_merge associative arrays
我正在尝试将一个项目前置到关联数组的开头。我想最好的方法是使用数组合并,但是我有一些奇怪的结果。我从一个MySQL数据库中获取产品的ID和名称,并将其作为一个关联数组返回,如下所示(不是返回的实际数据,而是这个问题的示例数据,它表示数据大致的样子):
1 |
这将被发送到HTML助手以创建一个下拉列表,该下拉列表将键与值相关联,并且数组项的值将被设置为下拉选择控件中的文本。我需要第一个项目类似于"请选择",键为0,所以我这样做了:
1 |
号
结果数组如下所示:
1 2 3 4 5 6 |
我真正想要的是不要丢失关联数组的键。有人告诉我,你可以按照我尝试的方式正确地使用数组合并,但是,我相信,因为我的键是整数,它不会将数组视为真正的关联数组,并像上面所示压缩它们。
问题是:为什么数组合并函数会更改项的键?我能阻止它这样做吗?或者有没有其他方法来完成我正在尝试的工作,在数组的开头添加新项?
从文档中:
If you want to append array elements from the second array to the first array while not overwriting the elements from the first array and not re-indexing, use the + array union operator
号
使用
1 |
只是为了好玩
1 2 3 4 5 6 7 | $newArray = array_combine(array_merge(array_keys($array1), array_keys($array2) ), array_merge(array_values($array1), array_values($array2) ) ); |
1 |
。
或者可以手动创建生成的数组:
1 2 3 | $newproducts = array (0 =>"Select a product"); foreach ($products as $key => $value) $newproducts[$key] = $value; |
您可以使用数组运算符:
1 |
号
它将进行联合,并且仅在键不重叠时才起作用。
从文档中:
Values in the input array with numeric keys will be renumbered with incrementing keys
starting from zero in the result array.
号
你们想看看
在本例中,它们的功能相同:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $products1 = array (1 => 'Product 1', 42 => 'Product 42', 100 => 'Product 100'); $products2 = array (0 => 'Select a product'); $result1 = array_replace($products1, $products2); $result2 = $products1 + $products2; Result for both result1 and result2: Keys are preserved: array(4) { [1] => string(9)"Product 1" [42] => string(10)"Product 42" [100] => string(11)"Product 100" [0] => string(16)"Select a product" } |
。
但是,如果两个数组中都存在相同的键,则它们不同:+operator不会覆盖该值,array_replace会覆盖该值。
你可以试试
1 2 |
。
这应该将0放在数组的开头,但它还将按您可能不需要的数字顺序对其他产品进行排序。