在二维数组中查找配对

时间:2018-04-25 17:12:30

标签: php arrays multidimensional-array

我有一个二维数组,并寻找一种方法来查找所有双重条目。例如。如果数组的格式为

$a = array(
   array('a','b','c'),
   array('d','a','e'),
   array('d','c','b')
)

该函数应返回列表

array(array(0,0),array(1,1))  // Since $a[0,0]=$a[1,1]
array(array(0,1),array(2,2))  // Since $a[0,1]=$a[2,2]
array(array(0,2),array(2,1))  // Since $a[0,2]=$a[2,1]
array(array(1,0),array(2,0))  // Since $a[1,0]=$a[2,0]
array(1,2)                    // Unmatched

有没有一种优雅/有效的方法来实现它?

1 个答案:

答案 0 :(得分:1)

使用嵌套循环。在结果中使用值作为键,并将坐标作为数组附加到这些键下。

foreach ($a as $x => $inner) {
    foreach ($inner as $y => $value) {
        $result[$value][] = [$x, $y];
    }
}

$result将包含所有给定值的坐标集。您可以按照set的大小对结果进行分组,以确定哪些值不匹配,成对或甚至多于两次出现(如果可能的话)。

foreach ($result as $value => $set) {
    $sets[count($set)][$value] = $set;
}