【问题标题】:Watch out for duplicate keys - how to solve this?注意重复键 - 如何解决这个问题?
【发布时间】:2012-02-01 01:20:50
【问题描述】:

在我询问了一种组合 2 个数组的方法后,我得到了几个答案,您可以在这里找到:

Array combine into associative array

我已经实现了接受的答案,但正如作者警告的那样,我遇到了“重复键”问题。

这是我正在使用的代码:

$a = array(4=>3,5=>3);
$b = array(array(0=>0,1=>4,2=>10,3=>1000),
           array(0=>0,1=>40,2=>100,3=>2000),
           array(4=>10)
          );

$c = array();
foreach($b as $tmp) {
    $c[] = $a+$tmp;
}

var_dump($c);

但它返回一个像这样的数组:

Array (
    [0] => Array (
        [3] => 1 
        [5] => 1 
        [6] => 0 
        [7] => 0 
        [8] => 0
        )
    [1] => Array (
        [3] => 1 
        [5] => 1 
        [6] => 0 
        [7] => 0 
        [8] => 0
        ) 
    [2] => Array (
        [3] => 1 
        [5] => 1 
        [6] => 1 
        [7] => 0 
        [8] => 0
        )
    [3] => Array ( 
        [3] => 1 
        [5] => 1 
        [6] => 1 
        [7] => 0 
        [8] => 0
        )
    [4] =>...

如您所见,密钥 0 与密钥 1.. 相同。

我该如何解决这个问题?

提前致谢。

【问题讨论】:

  • 你想要的实际输出是什么?
  • 这个:[0] => 数组([3] => 1 [5] => 1 [6] => 0 [7] => 0 [8] => 0)[ 1] => 数组([3] => 1 [5] => 1 [6] => 1 [7] => 0 [8] => 0)

标签: php arrays key duplicates


【解决方案1】:

抱歉,我的原始答案显示完全缺乏阅读理解能力。如果我正确理解您要完成的工作,应该可以解决问题:

$unique = array();
foreach ($c as $arr) {
  if ( ! in_array($arr, $unique)) {
    $unique[] = $arr;
  }
}

var_dump($unique);

这通过迭代原始数组并在遇到新元素时添加新元素来构建一个唯一数组。

【讨论】:

    【解决方案2】:

    如果您不关心维护旧的数组键,那么您可以使用array_merge 函数。

    <?php
    $array1 = array("color" => "red", 2, 4);
    $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
    $result = array_merge($array1, $array2);
    print_r($result);
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 2019-06-12
      • 2020-06-12
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多