【问题标题】:Unique values of the array with four fields具有四个字段的数组的唯一值
【发布时间】:2015-05-29 10:46:15
【问题描述】:

我有一个这样的数组:

array(
    0 => array(1, 2, 3, 4),
    1 => array(1, 3, 2, 4),
    2 => array(1, 2, 4, 3),
    3 => array(1, 2, 5, 6)
)

我必须删除重复的记录。所以我最终需要有这个数组:

array(
    0 => array(1, 2, 3, 4),
    3 => array(1, 2, 5, 6)
)

脚本是 PHP 的。

谁能帮忙? :)

【问题讨论】:

  • 您自己尝试过任何代码吗?至少表现出一些努力。
  • 是的,我正在尝试,但我正在做额外的循环来过滤。我想不循环。
  • @JakubKubera ^ 然后展示你所做的工作和你的努力!编辑您的问题并添加您的代码
  • @Uchiha OP 将收到他收到的每个答案的通知,因此无需写评论,这太啰嗦了。
  • @Rizier123 我删除了我的评论。感谢您指出。

标签: php arrays unique


【解决方案1】:

这应该适合你:

只需使用 array_map()sort() 数组遍历每个子数组。然后只需将它们返回implode()'ed。使用创建的数组,您可以使用 array_unique() 然后再次使用 explode() 值。

<?php

    $result = array_map(function($v){
        return explode(",", $v);
    }, array_unique(array_map(function($v){
            sort($v);
            return implode(",", $v);
        }, $arr)));

    print_r($result);

?>

输出:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [3] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 5
            [3] => 6
        )

)

【讨论】:

    【解决方案2】:

    另一种方法是

    $filter = array();
    $result = array_filter($array, function($e) use (&$filter) {
        $sum = array_sum($e);
        $ret = isset($filter[$sum]);
        $filter[$sum] = true;
    
        return !$ret;
    });
    

    Demo

    【讨论】:

      【解决方案3】:

      这一定很容易理解

      foreach($arr as $key => $value){
          sort($value);
          $arr[$key] = $value;
      }
      $result = array_unique($arr,SORT_REGULAR);
      print_r($result);
      

      输出:

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

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多