在php bidimensional数组中找到重复项

时间:2012-03-23 22:08:07

标签: php filter duplicates

我在php中有一个二维数组,如下所示:

Array (
        [0] => Array
            (
                        [index1] => -1
                        [index2] => 77
                        [description] => 7
                    )
        [1] => Array
            (
                        [index1] => -1
                        [index2] => 77
                        [description] => 5
                    )
        [2] => Array
            (
                        [index1] => -1
                        [index2] => 78
                        [description] => 12
                    )
)

我需要查找第一级数组之间是否存在重复。 但只考虑键index1和index2。

在上面的示例中,它应该返回true,因为0和1具有相同的index1和index2。

5 个答案:

答案 0 :(得分:2)

试试这个:

<?php

$a=array(
    array('index1'=>-1,'index2'=>77,'description'=>7),
    array('index1'=>-1,'index2'=>77,'description'=>5),
    array('index1'=>-1,'index2'=>78,'description'=>12)
);


function check($a){
    $data=array();

    foreach($a as $arr){
        if ($data[$arr['index1'].'|'.$arr['index2']]) {
            return true;
        }
        $data[$arr['index1'].'|'.$arr['index2']]=true;
    }
    return false;
}

if (check($a)) {
    echo "duplicates found";
}else{
    echo "no duplicates";
}

?>

答案 1 :(得分:1)

function hasDupes($array, $delim = '|') {
    $values = array();
    foreach ($array as $v) {
        $v = $v['index1'] . $delim . $v['index2'];
        if (isset($values[$v])) {
            return true;
        }
        $values[$v] = 0;
    }
    return false;
}

不需要在数组上嵌套循环或完整遍历(甚至多次遍历),这是大多数建议的array_something函数在内部执行的操作。当你看到一个你以前见过的元素时,迭代一次并停止。

答案 2 :(得分:0)

两种可以帮助您的方法:
1.如果您只想删除可以使用的副本:
http://php.net/manual/en/function.array-unique.php
2.如果你想找到副本,你可以扫描数组,并且每个&#34; item - 使用以下方法检查数组的其余部分:
http://php.net/manual/en/function.array-search.php

答案 3 :(得分:0)

这不是一个非常有效的算法,但假设外部数组的蛮力方式是数字索引:

function hasDuplicates($array) {
  $count = count($array);
  for ($i = 0; $i < $count; $i++){
    for ($j = $i+1; $j < $count; j++) { // check every later element in the array
      if ($array[i]['index1'] == $array[j]['index1'] && $array[i]['index2'] == $array[j]['index2']) {
        return true;
      }
    }
  }
  return false;
}

答案 4 :(得分:0)

  1. 使用http://de3.php.net/manual/de/function.uasort.php
  2. 等自定义排序功能对数组进行排序
  3. 遍历已排序的数组并成对比较邻居,如果它们相同则返回true,否则为false