Tom: Mehrdimensionales Array nach Wert sortieren

Beitrag lesen

Hello,

Wenn ich jetzt also

$data['name'] = array('Hans', 'Olaf', 'Adam');
$data['alter'] = array(32, 47, 21);

habe - wie soll ich das mit einer vorhandenen PHP-Array-Funktion sortieren, beispielsweise nach dem Namen?

Sowas würdest DU ja gar nicht haben, denn erstens würdest Du meinen Vorschlag genau lesen und zweitens wüsstest Du doch selber, dass die Indexe natürlich vergeben werden sollten.

In obigem Fall würde das zwar auch funktionieren, aber das wäre mir zu unsicher.

$_data['name'] = array (1=>'Hans', 5=>'Olaf', 22=>'Adam');
 $_data['alter'] = array(1=>32,     5=>47,     22=>21);

Die IDs (hier Indexe) muss man natürlich harmonisieren.
Bei Neubelegung geht es natürlich auch so, wie Du das gemacht hast, wenn die Anzahl und Reihenfolge der Elemente stimmt.

I.d.R. sind die Daten an IDs gebunden, und dann kann man die auch problemlos als Index für das Array verwenden.

Die Ausgabefunktion wäre dann:

#--- Sortierung nach Name durchführen

$leitspalte = 'name';         ## nur als Beispiel
  natsort($_data[$leitspalte]);

#--- nach einer Spalte sortiert ausgeben

foreach($_data[$leitspalte] as $key => $val)   ## hierzu MUSS das Array vollständig sein [1]!
  {
    foreach($_data as $colname => $fieldval)
    {
      echo $_data[$colname][$key];
    }
    echo "<br>\n";
  }

Vereinfacht dargestellt.

[1] unter vollständig wird hier verstanden, dass zu jeder Spalte und jedem Key auch ein Element vorhanden ist, nötigenfalls eben mit NULL belegt. Sosnt musst Du eben noch ein isset() spendieren.

Die Funktion ist _universell_.
Man muss nur die Sortierspalte angeben und die Ausgabe der Datensätze findet in der Soretierung der Spalte statt. Zusammengehörige Daten eines Satzes werden zeilenweise ausgegeben, so wie es üblich ist.

Was hier nicht geht, ist nach name UND alter zu sortieren.

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau