-1

我有这个数组。在此我想跳过反向数据的值。

$data = array(
    array(2, 1),
    array(1, 2),
    array(1, 2),
    array(2, 1),
    array(2, 3),
    array(3, 2),
    array(4, 5)
);

我想跳过这些值:

array(1,2)
array(1,2)
array(2,1)
array(3,2)

我希望结果数组是这样的:

array(
    array(2, 1),
    array(2, 3),
    array(4, 5)
);
4

2 回答 2

2
$data = [[2,1], [1,2], [1,2], [2,1], [2,3], [3,2], [4,5]];

$data = array_map(
    function($value) {
        sort($value);
        return serialize($value);
    },
    $data
);

$data = array_unique($data);
$data = array_map('unserialize', $data);
array_walk($data, 'sort');

var_dump($data);

演示

编辑

根据 arbogast 的评论,这可以进一步简化,消除序列化/反序列化步骤:

$data = [[2,1], [1,2], [1,2], [2,1], [2,3], [3,2], [4,5]];

array_walk($data, 'sort');
$data = array_unique($data, SORT_REGULAR);

var_dump($data);

演示

于 2015-08-08T10:14:29.230 回答
0

尝试这个:

function filterArray($data)
{
      $result = array();
      array_push($result, $data[0]); //You can always add first item without performing any check
      for($i=1; $i<count($data); $i++)
      {
          $allowAdd = true;
          foreach($result as $res)
          {
              if(($res == $data[$i]) || ($res[0] = $data[$i][1] && $res[1] = $data[$i][0]))
              {
                  $allowAdd = false;
                  break;
              }
          }
          if($allowAdd)
            array_push($result, $data[$i]);
     }
     return $result;
}

现在,当您调用 时filterArray($data),这将返回过滤后的结果。

于 2015-08-08T10:15:20.023 回答