如何在一个数组中允许相同的键?

时间:2019-02-18 11:08:30

标签: php

我需要向数组添加相同的键,但具有不同的值,

foreach ($selections as $selection) {
    $array += [$selection['option_id']=>$selection['product_id']];
}

//示例输出

$array = [30=>12,14=>10], 

但实际上应该是

[30=>7,30=>12,14=>10];

重复键时,它会合并。

3 个答案:

答案 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];
      }
  }
}