zippex: leere "assoziative" Spalten entfernen

Hallo!
Ich bekomme durch eine Datenbankabfrage folgendes Ergebnisarray:
$result[anzahl_ergebnisse-1]['assoziativ']

also z.B. bei zwei Datensätzen folgende Beispieldaten:
$result[0]['name']     -> Müller
$result[0]['tel']      -> 01701234567
$result[1]['name']     -> Mayer
$result[1]['tel']      -> 01711234567

Diese Daten möchte ich nun in einer Tabelle ausgeben, der Form
NAME     TEL
Müller   01701234567
Mayer    01711234567

Kein Problem bis hier hin, ABER angenommen für alle Datensätze (das können unter Umständen viele sein) wurde durchgehend KEINE Telefonnummer angegeben, dann soll die Spalte "TEL" in der Ausgabe auch gar nicht existieren.

Lösung die ich sehe: iterativ überprüfen "gibt es unter allen Datzensätzen eine telnummer" --> wenn die erste gefunden wurde, interne Variable setzen für "telefonnummer hinschreiben". Erst wenn das für alle Felder (ca. 15 dürfen NULL sein und müssen deshalb gecheckt werden) überprüft ist kann ich endlich die Tabelle hinschreiben.

Viel besser würde es mir gefallen, wenn es eine Funktion gäbe, die das selbständig (und effizienter) macht. Denn für die Lösung oben sehe ich schon zwei recht langsame geschachtelte for-Schleifen...

Gibt es vielleicht eine Funktion (die ich bei php.net übersehen habe) oder einen Trick, mit dem man solche leeren assoziativen Spalten löschen kann?

Ich vermute, dass die Lösung des Problems nur mit PHP erreicht werden kann und nicht durch Anpassen der MYSQL-Abfrage, lasse mich aber gerne vom Gegenteil überzeugen. Für diesen Fall die für das Beispiel oben passende entsprechende Abfrage-Funktion:

function foo() {
   $result=MYSQL_QUERY("SELECT p.name, n.nummer
   FROM person AS p JOIN nummern AS n ON p.id = n.id");
   $i = 0;
   while($array = mysql_fetch_array($result, MYSQL_ASSOC)) {
        $result[$i]=$array;
        $i++;
   }
   return $result;
}

Vielen Dank schon mal :)
mfG zippex

  1. Irgendwie komme ich manchmal selbst auf eine akzeptable Lösung, gerade dann, wenn ich vorher einen Beitrag in einem Forum geschrieben habe. Habe doch keine For-Schleifen benutzen müssen, ich kann aber nicht einschätzen ob das hier jetzt bei wirklich vielen Datensätzen performant ist.
    Wenn jemand eine bessere Lösung findet freue ich mich natürlich :)
    Falls sonst jemand mal über dieses - sicher nicht alltägliche - Problem stoßen sollte, hier meine Lösung:

    in $result steckt also das Ergebnis-Array der Datenbankabfrage

    // ich erzeuge ein assoziatives Array für alle Feldwerte die NULL sein können und nehme pauschal mal an, dass alle keinen Inhalt haben (0)

    $write = array("name" => 0, "tel" => 0);

    // in dieser Schleife durchsuche das Ergebnisarray und setze, wenn ein Wert existiert, den entsprechenden Wert in $write auf 1

    reset ($write);
    while (list ($key, $val) = each ($write)) {
       foreach ($result as $teilresult) {  // je Datendatz Benutzer
     if ($teilresult[$key] != "") $write[$key] = 1;
       }
    }

    // im Array $write steht jetzt genau drin, welche Felder ich in die Tabelle schreiben muss, weil Daten enthalten sind (1) oder welche Felder leer sind (0)

    reset ($write);
    while (list ($key, $val) = each ($write)) {
       echo "$key => $val\n";
    }