我需要向数组添加相同的键,但具有不同的值,
foreach ($selections as $selection) {
$array += [$selection['option_id']=>$selection['product_id']];
}
//示例输出
$array = [30=>12,14=>10],
但实际上应该是
[30=>7,30=>12,14=>10];
重复键时,它会合并。
答案 0 :(得分:3)
你不能。
但是您可以将此键的值设置为数组。
所以你会有
$array = [30=>[7,12],14=>10];
您可以在$ array [30]上使用任何数组函数
答案 1 :(得分:1)
您应该做的是将产品ID作为数组返回:
$array = array_reduce($selections, function ($carry, $selection) {
if (!isset($carry[$selection['option_id']])) {
$carry[$selection['option_id']] = [];
}
$carry[$selection['option_id']][] = $selection['product_id'];
return $carry;
}, []);
现在结果将是:
[30 => [7, 12], 14 => [10]];
答案 2 :(得分:0)
正如单词本身所说,数组中的键是访问它们包含的值的键,并且每个键都必须是唯一的,否则您将无法使用。如果您可以拥有两个或更多个相同的值,那么您如何确定哪个将访问一个值,哪个将访问另一个值?为了解决您的问题,您可以采用以下方法:生成多维数组,以便可以将多个值存储在单个键的“后面”。例如。 [30 => [7,12],14 => 10] 根据您的代码,您可以使用嵌套的foreach创建一个双循环,以浏览所有值,例如:
foreach ($selections as $selection) {
if(!is_array($selection['product_id']) $array += [$selection['option_id']=>$selection['product_id']];
else {
foreach ($selection['product_id'] as $product) {
$array += [$selection['option_id']=> product];
}
}
}