У меня есть массив PHP со следующими данными
Array
(
[3] => Array
(
[0] => 4095
[2] => 651
)
[4095] => Array
(
[0] => 3
)
[651] => Array
(
[0] => 4432
)
[4432] => Array
(
[0] => 651
)
[92] => Array
(
[0] => 45
)
)
Вышеуказанный массив имеет ключи как student_id
, а значения также student_id
создают круговое отношение. Я пытаюсь достичь того, чтобы все student_id
имели одинаковый набор student_id
значений. В основном, если student_id
3
относится к 4095
, 4432
& 651
, то, в свою очередь, каждое из этих значений должно иметь среди них 3
, включая другие student_id
из 3
. Приведенный ниже вывод демонстрирует, чего я пытаюсь достичь.
Array
(
[3] => Array
(
[0] => 4095
[1] => 4432
[2] => 651
)
[4095] => Array
(
[0] => 3
[1] => 4432
[2] => 651
)
[651] => Array
(
[0] => 3
[1] => 4432
[2] => 4095
)
[4432] => Array
(
[0] => 3
[1] => 4095
[2] => 651
)
[92] => Array
(
[0] => 45
)
[45] => Array
(
[0] => 92
)
)
Объяснение выходных данных
Ключи массива 3
, 4095
, 651
& 4432
связаны с друг друга либо напрямую, либо через общее отношение (косвенное), поэтому будет иметь общий набор значений (родные братья). Ключ 92
во входном массиве имеет значение (одноуровневое) 45
, поэтому в результирующем массиве новый ключ 45
будет добавлен в массив также с обратным соотношением.
Что Я пытался до сих пор
Я пытался сделать это с этим кодом
$syncedSiblings = [];
foreach ($studentsWithSiblings as $sid => $siblings) {
$all = map_assoc(array_merge([$sid], array_keys($siblings)));
foreach ($all as $studentId) {
if (isset($syncedSiblings[$studentId])) {
$old = $syncedSiblings[$studentId];
$syncedSiblings[$studentId] = array_unique(array_merge($old, array_except($all, $studentId)));
} else {
$syncedSiblings[$studentId] = array_unique(array_except($all, $studentId));
}
}
}
Где $studentsWithSiblings
имеет вышеуказанный массив & array_except
возвращает массив без переданных значений в качестве второго аргумента ,
Это вывод, который я сейчас получаю
Array
(
[3] => Array
(
[0] => 4095
[1] => 651
)
[4095] => Array
(
[0] => 3
[1] => 651
)
[651] => Array
(
[0] => 3
[1] => 4095
[2] => 4432
)
[4432] => Array
(
[0] => 651
)
[92] => Array
(
[0] => 45
)
)
Любая помощь с этим будет высоко оценена.