У меня есть двумерный массив, и я ищу способ найти все двойные записи. Например. если массив имеет форму
$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
Есть ли элегантный / эффективный способ реализовать это?






С вложенным циклом. Используйте значения в качестве ключей в результате и добавьте координаты в виде массивов под этими ключами.
foreach ($a as $x => $inner) {
foreach ($inner as $y => $value) {
$result[$value][] = [$x, $y];
}
}
$result будет содержать наборы координат для всех заданных значений. Вы можете сгруппировать результаты по размеру набора, чтобы определить, какие значения не совпадают, пары или даже больше двух вхождений (если это возможно).
foreach ($result as $value => $set) {
$sets[count($set)][$value] = $set;
}
Я получил почти такой же ответ. Проклятие