【问题标题】:Once more about removing duplicate values from a multi-dimensional array in PHP再次关于从 PHP 中的多维数组中删除重复值
【发布时间】:2014-10-17 10:02:08
【问题描述】:

经过一番艰苦的搜索,我发现了一些类似的问题,比如我想解决的问题,但我无法使用他们的答案。

你有一些很好的例子:

How to remove duplicate values from a multi-dimensional array in PHP

How to remove duplicate values from a multi-dimensional array in PHP

How to remove duplicate values from a multi-dimensional array in PHP revisited

这个是最相似的,但答案对我来说不起作用。

php filter array values and remove duplicates from multi dimensional array

我的问题的主要区别在于,虽然人们正在寻找从数组中删除整个重复子数组的解决方案,但当子数组只有一个 $key => $value 对时,我试图删除子数组类似于另一个子数组的对应对。其他对可能有不同的值,甚至相同。

这是我的数组:

Array(

[0] => Array
    (
        [0] => AAA
        [1] => 500
    )

[1] => Array //Won't be delete 'cause [0] is different, although [1] is the same.
    (
        [0] => BBB
        [1] => 500
    )

[2] => Array //Will be delete 'cause [0] is the same.
    (
        [0] => AAA
        [1] => 500
    )

[3] => Array //Won't be delete 'cause [0] is different.
    (
        [0] => CCC
        [1] => 820
    )

[4] => Array
    (
        [0] => AAA //Will be delete 'cause [0] is the same. [1] is also different.
        [1] => 774
    )

我怎样才能设法删除这些子数组,所以我有以下结果:

Array(

[0] => Array
    (
        [0] => AAA
        [1] => 500
    )

[1] => Array
    (
        [0] => BBB
        [1] => 500
    )

[2] => Array
    (
        [0] => CCC
        [1] => 820
    )

提前非常感谢!

【问题讨论】:

    标签: php duplicate-removal on-duplicate-key arrays


    【解决方案1】:

    最简单的解决方案(在我看来),而不是使用难以维护的神奇array_filterarray_map 手工,而是自己编写一个专门的函数:

    $out = [];
    $usedKeys = [];
    foreach ($in as $element)
    {
        list ($a, $b) = $element;
        if (!isset($usedKeys[$a]))
        {
            $usedKeys[$a] = true;
            $out[]= $element;
        }
    }
    var_dump($out);
    

    这将只返回第一个对元素唯一的元素(如果有多个条目,则取第一个)。

    【讨论】:

      【解决方案2】:

      这对我有用(基于提供的链接):

      <?php
      
      $items = array(
          array(
              0 => 'AAA',
              1 => 500,
          ),
          array(
              0 => 'BBB',
              1 => 500,
          ),
          array(
              0 => 'AAA',
              1 => 500,
          ),
          array(
              0 => 'CCC',
              1 => 820,
          ),
          array(
              0 => 'AAA',
              1 => 774,
          ),
      );
      
      
      
      
      $taken = array();
      
      foreach($items as $key => $item) {
          if(!in_array($item[0], $taken)) {
              $taken[] = $item[0];
          } else {
              unset($items[$key]);
          }
      }
      
      
      echo '<pre>'.print_r($items,true).'</pre>';
      

      fiddle link

      【讨论】:

        猜你喜欢
        • 2011-04-05
        • 1970-01-01
        • 2017-07-23
        • 2017-06-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 2019-09-04
        相关资源
        最近更新 更多