添加两个关联数组的最佳方法是什么,这样就不会重复写入重复值:`+`或`array_merge`? [重复]



此问题已经存在 这里有一个答案:</ p>





  • + PHP中的数组运算符?



    8 answers

    </ span>

    </ li>

    </ ul>

    </ div>

    添加两个关联数组的最佳方法是不要覆盖重复值: + </ code>或 array_ merge </ code>?</ p>

    我很确定使用 + </ code>运算符我可以添加两个关联数组,以便重复 价值没有写过,但是答案说的是不同的东西,所以不确定是否 确实如此。</ p>

    如果你能分享一些关于我们如何添加两个关联数组以便不重写重复值的话,我将非常感激。</ p>

    感谢您的时间和回复。 </ p>
    </ div>

展开原文

原文

This question already has an answer here:

What is the best way to add two associative arrays such that duplicate values are not over written : + or array_ merge ?

I was pretty sure that using + operator I can add two associative arrays such that duplicate values are not over written but this Answer is saying something different and so am not sure if it is really true.

I would really appreciate if you can share some lights on how can we add two associative arrays such that duplicate values are not over written.

Appreciate your time and responses.

</div>

5个回答



你真的想要array_merge_recursive
如果KEY相同但值不同,这会创建一个数组数组</ p>

如果找到重复的键,array_merge和union都将DISCARD其中一个值</ p>
</ div>

展开原文

原文

You actually want array_merge_recursive This creates an array of arrays if the KEY is the same but the value is different

Both array_merge and union will DISCARD one of the VALUES if a duplicate key is found

dongqishou7471
dongqishou7471 +1,因为它似乎是问题提问者想要的
接近 11 年之前 回复
dongmeng0317
dongmeng0317 如果找到重复的密钥,那么array_merge_recursive会不丢弃其中一个VALUES吗? 这100%是真的吗?
接近 11 年之前 回复



数组不能有多个具有相同键的键值对。 所以如果你有:</ p>

  $ array1 = array(
'foo'=&gt; 5,
'bar'=&gt; 10,
'baz'= &gt; 6
);

$ array2 = array(
'x'=&gt; 100,
'y'=&gt; 200,
'baz'=&gt; 30
); \ n </ code> </ pre>

如果组合这些数组,则只能保留组合数组的其中一个值。 您描述的方法有两个不同的方法:</ p>

  print_r(($ array1 + $ array2)); 

// //结果:
//数组
/ /(
// [foo] =&gt; 5
// [bar] =&gt; 10
// [baz] =&gt; 6
// [x] =&gt; 100
// [y] =&gt; 200
//)

print_r(array_merge($ array1,$ array2));

// //结果:
//数组
//(
// [[ foo] =&gt; 5
// [bar] =&gt; 10
// [baz] =&gt; 30
// [x] =&gt; 100
// [y] =&gt; 200

//)
</ code> </ pre>

因此,您确实需要定义组合数组时想要</ strong>的内容。</ p>

UPDATE </ strong> </ p>

根据@ davidosomething的回答,如果您执行 array_merge_recursive()</ code>,会发生什么? / p>

  print_r(array_merge_recursive($ array1,$ array2)); 

// //结果:
//数组
//(
// [foo] =&gt; 5
// [bar] =&gt; 10
// [baz] =&gt;数组
//(
// [0] =&gt; 6
// [1] = &gt; 30
//)
//
// [x] =&gt; 100
// [y] =&g 吨; 200
//)
</ code> </ pre>
</ div>

展开原文

原文

An array can't have more than one key-value pair with the same key. So if you have:

$array1 = array(
  'foo' => 5,
  'bar' => 10,
  'baz' => 6
);

$array2 = array(
  'x' => 100,
  'y' => 200,
  'baz' => 30
);

If you combine these arrays, you only get to keep one of the values of the combined array. The methods you describe do two different things:

print_r(($array1 + $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => 6
//     [x] => 100
//     [y] => 200
// )

print_r(array_merge($array1, $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => 30
//     [x] => 100
//     [y] => 200
// )

So you really need to define what you want to happen when you combine the arrays.

UPDATE

Based on @davidosomething's answer, here's what happens if you do array_merge_recursive():

print_r(array_merge_recursive($array1, $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => Array
//         (
//             [0] => 6
//             [1] => 30
//         )
// 
//     [x] => 100
//     [y] => 200
// )

dongyi6845
dongyi6845 听起来就像那样,array_merge_recursive将起作用,因此键可能是in_catalog,值可能是数组([0] =>“西班牙目录”,[1] =>“美国目录”) - 您可以根据需要显示这些值。 希望这些答案对你有帮助! 我鼓励您了解更多并参与stackoverflow!
接近 11 年之前 回复
drphfy1198
drphfy1198 它不必取代另一个,但我应该有两个值,而不是一个。 例如,对于商品ID 1,西班牙目录中的一个产品和美国目录中的一个产品,但是当我显示完整目录时,它应该包含已被分配密钥作为要约ID的产品,这是1,希望这澄清了我的 场景。
接近 11 年之前 回复
dongzhi9457
dongzhi9457 一个人取代另一个人,还是他们需要以某种方式结合? 我没有清楚地了解你要对组合阵列做些什么。
接近 11 年之前 回复
dongri1989
dongri1989 谢谢artlung,清晰的表示非常有助于获得有关它如何工作的细节。
接近 11 年之前 回复
doudou201701
doudou201701 所以在这两种情况下,我都会失去其中一个实体,无论是对于array_merge还是左侧为+运算符......在一个响应中建议使用array_merge_recursively,这是什么才能真正解决问题 ?
接近 11 年之前 回复



如果要保留两个值,则必须更改其中至少一个的键。 也许你可以编写自己的方法来合并两个前缀所有键的数组。</ p>
</ div>

展开原文

原文

If you want to keep both values, you have to change the key for at least one of them. Perhaps you can write your own method to merge two arrays which prefixes all keys.

dpqy77560
dpqy77560 所以你建议Suggestion Answer链接提供100%真实?
接近 11 年之前 回复



array_merge </ code>将组合数组,以便在数组具有连续的数字键时不会丢失任何值。 如果您开始混合字符串键,将覆盖具有相同键的值。 如果您将数组视为数组而不是映射,则array_merge将执行您想要的操作。</ p>
</ div>

展开原文

原文

array_merge will combine the arrays such that no values are lost, provided the arrays have contiguous numeric keys. If you start mixing string keys, values with the same keys will be overwritten. If you treat your arrays as arrays and not maps, array_merge will do what you want.

dongshan0202405
dongshan0202405 数组合并在我的情况下不起作用,因为我有字符串键,所以如果我有重复的键比值重写,所以这不是我想要的。
接近 11 年之前 回复



图片优于1000字</ p>

  $ a = array('foo  '=&gt;'A'); 
$ b = array('foo'=&gt;'B');

print_r($ a + $ b); // foo = A
print_r(array_merge($ a,$ b)); // foo = B
</ code> </ pre>
</ div>

展开原文

原文

a picture is better than 1000 words

$a = array('foo' => 'A');
$b = array('foo' => 'B');

print_r($a + $b);              // foo=A
print_r(array_merge($a, $b));  // foo=B

dongmengan8620
dongmengan8620 所以在这两种情况下我都失去了一个值,因为我正在寻找的是获得foo的A和B两个值,有没有办法得到这个?
接近 11 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐