Skip to content
This repository was archived by the owner on Feb 6, 2020. It is now read-only.

Commit 5941529

Browse files
committed
#83 - de-duplicating printed cycles
1 parent b3ab8ea commit 5941529

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/Exception/CyclicAliasException.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function ($alias) use ($aliases) {
3535
return new self(sprintf(
3636
"A cycle was detected within the provided aliases:\n\n%s"
3737
. "\n\nThe cycle was detected in the following alias map:\n\n%s",
38-
self::printCycles($detectedCycles),
38+
self::printCycles(self::deDuplicateDetectedCycles($detectedCycles)),
3939
self::printReferencesMap($aliases)
4040
));
4141
}
@@ -112,4 +112,28 @@ function ($cycle) {
112112
)
113113
);
114114
}
115+
116+
/**
117+
* @param bool[][] $detectedCycles
118+
*
119+
* @return bool[][] de-duplicated
120+
*/
121+
private static function deDuplicateDetectedCycles(array $detectedCycles)
122+
{
123+
$detectedCyclesByHash = [];
124+
125+
foreach ($detectedCycles as $detectedCycle) {
126+
$cycleAliases = array_keys($detectedCycle);
127+
128+
sort($cycleAliases);
129+
130+
$hash = serialize(array_values($cycleAliases));
131+
132+
$detectedCyclesByHash[$hash] = isset($detectedCyclesByHash[$hash])
133+
? $detectedCyclesByHash[$hash]
134+
: $detectedCycle;
135+
}
136+
137+
return array_values($detectedCyclesByHash);
138+
}
115139
}

0 commit comments

Comments
 (0)