我有一个二维数组,并寻找一种方法来查找所有双重条目。例如。如果数组的格式为
$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
有没有一种优雅/有效的方法来实现它?
答案 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;
}