ich stehe vor einem Problem und hoffe jemand hier kann mir weiterhelfen oder Denkanstöße geben.
Gegeben ist folgendes:
Zitat
A -> 1, 2, 3
B -> 1, 2, 6
C -> 1, 6, 7, 2
B -> 1, 2, 6
C -> 1, 6, 7, 2
Ich möchte daraus das machen:
Zitat
1 -> A, B, C
2 -> C
3 -> A
6 -> B, C
7 -> A, B, C
2 -> C
3 -> A
6 -> B, C
7 -> A, B, C
Das funktioniert mit folgenden Code wunderbar:
$args = array(...); $values = array(); foreach ($args as $k => $v) { foreach ($v as $x) { $values[$x] = array(); } } foreach ($args as $k => $v) { foreach ($values as $v_k => $v_v) { if (in_array($v_k, $v)) { $values[$v_k][] = $k; } } }
Das Endresultat soll wie folgt aussehen:
Zitat
A, B, C -> 1, 7
A -> 3
B, C -> 6
C -> 2
A -> 3
B, C -> 6
C -> 2
Mein Code funktioniert aber noch nicht ganz so, wie es soll... Es fasste nur Einträge zusammen die exakt die gleichen Werte beinhalten:
foreach ($values as $p => $s) { foreach ($values as $pLevel2 => $sLevel2) { // identische einträge nicht vergleichen if ($p === $pLevel2) { continue; } // unterschiede verstellen if ( count(array_diff($s, $sLevel2)) === 0 && count(array_diff($sLevel2, $s)) === 0 ) { // beide keys löschen unset($values[$p]); unset($values[$pLevel2]); // und zusammengefasst als neuen eintrag in $values anlegen $values[$p . ',' . $pLevel2] = $s; } } }
Wie muss ich weiter vorgehen, wenn aus:
Zitat
A -> 1, 2, 3, 4, 5
B -> 1, 2, 3, 4
B -> 1, 2, 3, 4
das werden soll:
Zitat
A,B -> 1, 2, 3, 4
B -> 5
B -> 5
Vielen Dank im Voraus!