Ich habe es hin bekommen! War bisschen Krampf, aber es geht!
Hab sie so ausgelegt, dass man bei $group_keys und $sum_keys sowohl einzelne "Spalten" als auch mehrere (als Array) angeben kann!
Wenn jmd. Verbesserungen und Optimierungen hat, bitte melden... Bin für alle Ideen offen! Fehlt vielleicht noch eine Funktion?
Die ganze Funktion sollte ab PHP 4.1.0 laufen...
function array_distinct ($array, $group_keys, $sum_keys = NULL, $count_key = NULL)
{
#Keys zu Arrays machen
if (!is_array ($group_keys)) $group_keys = array ($group_keys);
if (!is_array ($sum_keys)) $sum_keys = array ($sum_keys);
#Variablen definieren
$existing_sub_keys = array ();
$output = array ();
#Verarbeitung
foreach ($array as $key => $sub_array){
$puffer = NULL;
#Keys gruppieren
foreach ($group_keys as $group_key){
$puffer .= $sub_array[$group_key];
}
$puffer = serialize ($puffer);
if (!in_array ($puffer, $existing_sub_keys))
{
$existing_sub_keys[$key] = $puffer;
$output[$key] = $sub_array;
}
else{
$puffer = array_search ($puffer, $existing_sub_keys);
#Keys addieren
foreach ($sum_keys as $sum_key){
if (is_string ($sum_key)) $output[$puffer][$sum_key] += $sub_array[$sum_key];
}
#Keys zählen
if (!array_key_exists ($count_key, $output[$puffer])) $output[$puffer][$count_key] = 1;
if (is_string ($count_key)) $output[$puffer][$count_key]++;
}
}
return $output;
}