Andü: DISTINCT-änhliche Funktion

Beitrag lesen

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;
}