【问题标题】:Remove duplicates pair in an array and also in reverse order PHP Laravel删除数组中的重复对,也以相反的顺序 PHP Laravel
【发布时间】:2016-04-19 15:09:42
【问题描述】:

我有一个数组

array:2 [▼
      0 => array:2 [▼
        0 => 159
        1 => 158
      ]
      1 => array:2 [▼
        0 => 159
        1 => 158
      ]
      2 => array:2 [▼
        0 => 158
        1 => 159
      ]
    ]

我想以相反的顺序删除重复的和重复的。例如索引 0 和索引 1 具有相同的值 159 and 158 也相同的顺序像 0 => 1591 => 158 。我想删除索引10。既然是一样的。如果你注意到索引2。它具有相同的值唯一的区别是顺序0 => 1581 => 159 我也想删除它,因为它是相同的对值。如果该数组是$remove_arr

,我该怎么做

因此,由于我将删除索引2 和索引01,因此应该只剩下一个索引。

【问题讨论】:

    标签: php arrays laravel multidimensional-array


    【解决方案1】:

    这是一个更简短的解决方案:

    $data = [[158, 159], [158, 159], [159, 158]];
    
    $unique = array_unique(array_map(function ($item) {
        sort($item); return $item;
    }, $data), SORT_REGULAR);
    
    dump($unique); // This will output [[158, 159]]
    

    此解决方案对 2 级数组的内容进行排序。所以排序后,最后一个值也会变成[158, 159],所以array_unique可以正确评估为重复。

    【讨论】:

    • 我没有升级这个变体:)。 +1
    【解决方案2】:

    count(array_intersect()) 获取数组中相同项目的数量。 当它等于数组长度时,删除其中一个

    $remove_arr = [
    [158, 159],
    [158, 159],
    [159, 158]
    ];
    
    for($i = count($remove_arr)-1; $i >= 0 ; $i--) {
       $j = $i-1; 
       while ($j >= 0) { 
          if (count(array_intersect($remove_arr[$i],$remove_arr[$j])) == count($remove_arr[$i]))
               { unset($remove_arr[$i]); break; }
           else $j--;
       }
    }
    
    print_r($remove_arr);
    

    【讨论】:

    • 谢谢。会调查的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2018-10-13
    • 2013-05-29
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多