array_combine für zweidimensionales array
Hübi
- php
Wie kann ich von einer numerischen Indizierung eines 2 - dimensionaler Variable zu einer alphanumerischen Indizierung gelangen.
BSP:
$M[2][4] = "Wert so und so";
zu
$M["xy_id"]["z_attr"] = "Wert so und so";
Die Indizes habe ich in zwei Arrays gespeichert.
Könnte mir jemand einen Denkanstoß geben.
(Sorry für die kurze Erklärung, hatte gerade einen riesen TExt geschrieben, der mir leider verloren ging und bin gerade nicht mehr in der Lage nochmal so ausführlich zu schreiben).
PS: mit array_combine für eindimensionale Arrays klappt es übrigens super.
Vielen Dank für einen Denkanstoß
Sorry der erste Satz muss lauten:
Wie kann ich von einer numerischen Indizierung einer 2 - dimensionalen Variablen zu einer alphanumerischen Indizierung gelangen.
Hello,
Wie kann ich von einer numerischen Indizierung eines 2 - dimensionaler Variable zu einer alphanumerischen Indizierung gelangen.
BSP:
$M[2][4] = "Wert so und so";
zu
$M["xy_id"]["z_attr"] = "Wert so und so";
Wie korrespondieren denn die Elemente miteinander? Sind sie alle durch ihre Position einander zugeordnet? Ist es eine streng bijektive Abbildung?
Das solltest Du erstmal klären, um dann eine geeignete Abbildungsvorschrift / einen Algorithmus / ein Stück strukturierte Programmierung dafür erzeugen zu können.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo, bin nicht ganz sicher, ob ich Deine Fragen verstehe. Ich versuche es mal.
Wie korrespondieren denn die Elemente miteinander?
Die Elemente (im Beispiel "Wert so und so") sind unabhängig voneinander. Werte können doppelt vorkommen.
Sind sie alle durch ihre Position einander zugeordnet?
Ist es eine streng bijektive Abbildung?
Vielleicht hilft das:
Alle Zeilen haben die gleiche Spaltenanzahl (was ich natürlich auch prüfen möchte). Also wie eine 4x10 Matrix beispielsweise.
Wie gesagt, ich möchte mit den Werten nichts machen. Ich möchte nur eigene Schlüssel (alphanum.) einsetzen statt [0],[1],...
Um meine Frage mal ein bisschen runterzubrechen:
Welches Konstrukt um Arrays/Matrizzen zu durchlaufen (foreach, each, while(list...) each) ist geeignet, um die Schlüssel zu ändern?
Ich komme nur mit einer for-Schleife und array_combine daran. Ist das das letzte Wort?
Hi!
Welches Konstrukt um Arrays/Matrizzen zu durchlaufen (foreach, each, while(list...) each) ist geeignet, um die Schlüssel zu ändern?
Gar keins. Entweder erzeugst du ein neues Array oder du erzeugst neue Elemente mit neuen Keys und entfernst die alten.
Lo!
Das ist doch mal eine Aussage! Dann brauche ich ja auch nicht mehr lange suchen.
Allerdings: array_combine kann das ja für 1-dim. Arrays. Ich suchte soetwas für 2-dim. Arrays. Oder array_combine in Komb. mit einem Schleifenmechanismus. Ich poste später mal meinen Ansatz dafür.
Hi!
Allerdings: array_combine kann das ja für 1-dim. Arrays. Ich suchte soetwas für 2-dim. Arrays. Oder array_combine in Komb. mit einem Schleifenmechanismus.
Es gibt genaugenommen keine mehrdimensionalen Arrays unter PHP. Das sind alles nur Arrays, deren Elemente weitere Arrays sein können oder auch nicht. Die Array-Funktionen sind bis auf wenige Ausnahmen immer nur für ein Array ausgelegt.
Lo!
Allerdings: array_combine kann das ja für 1-dim. Arrays. Ich suchte soetwas für 2-dim. Arrays. Oder array_combine in Komb. mit einem Schleifenmechanismus. Ich poste später mal meinen Ansatz dafür.
Sagen wir:
$DB_Fields ist die Matrix mit bislang numerischen Schlüsseln (Bsp: $DB_Fields[2][1] gibt "Kuhmilch").
$Fields ist ein Array mit Strings für die neuen Zeilen-Schlüssel. Länge gleich der ersten Dim von $DB_Fields (Beispiel: "Erika", "Toni", "Lisa", "Eumel").
$keysf ist ein Array mit Strings für die neuen Spalten-Schlüssel. Länge gleich der zweiten Dim von $DB_Fields (Beispiel: "Name", "Output", "Sowienoch").
$DBdef_Field ist die neue Matrix mit gleichen Werten, aber String-Schlüsseln (Bsp: $DB_Fields["Lisa"]["Output"] gibt "Kuhmilch").
$DBdef_Field = array();
for($i = 0; $i < count($Fields); $i++){
$DBdef_Field[$Fields[$i]] = array_combine($keysf, $DB_Fields[$i]);
}
Geht es auch einfacher? Ich finde php heute sehr hässlich.
Hi,
Geht es auch einfacher?
Können wir kaum sinnvoll beurteilen, so lange du uns immer noch verschweigst, wozu das Unterfangen eigentlich gut sein soll.
Ich finde php heute sehr hässlich.
Ja, geht mir mit deinem Code gerade auch so :-)
MfG ChrisB
Hi,
Geht es auch einfacher?
Können wir kaum sinnvoll beurteilen, so lange du uns immer noch verschweigst, wozu das Unterfangen eigentlich gut sein soll.
Ich finde php heute sehr hässlich.
Ja, geht mir mit deinem Code gerade auch so :-)
MfG ChrisB
Vielen Dank für die Nachfrage:
Ich habe ein Mini-DB-System, welches über Ascii files läuft, gebaut. Eine Funktion lädt Dateien in 2-dim. Variablen, wobei eine Dimension durch Zeilen hergestellt wird und die zweite Dimension durch Trennung der Zeile anhand von "¿" entsteht. Ich erhalte als Rückgabewert eine Variable $M, die also 2-dim. ist. Unten nochmal der Beispiel-Code mit einer plausibleren Variablen Bezeichnung.
Wichtig: die Dimensionen bleiben immer gleich. Sagen wir 4 Zeilen und 20 Spalten. Es sind Steuerdateien, die immer die gleiche Struktur haben.
Jetzt will ich die Werte aus den Dateien aus ganz bestimmten Gründen nicht über die numerischen Schlüssel ansprechen ($M[1][0]) sondern über String-Schlüssel. Dazu habe ich einen String-Array der Länge 4, einen der Länge 20. Wie gesagt, bleiben ja konstant.
$M : input Matrix
$key_cols = array("Id", "Name", "Desc", ....) //Dimension 20
$key_rows = array("Erika", "Hummel", "Dummdidu", "Esel") // Dim 4
$M_neu: output Matrix
$M_neu = array();
for($i = 0; $i < count($key_rows); $i++){
$M_neu[$key_rows[$i]] = array_combine($key_cols, $M[$i]);
}
Das tut, was ich will. Ist das jetzt das eleganteste??
Hi,
Ich habe ein Mini-DB-System, welches über Ascii files läuft, gebaut.
Das tut, was ich will. Ist das jetzt das eleganteste??
Nein, sowas ist seltenst elegant.
Datenbanken existieren, und wenn's nur SQLite wäre.
MfG ChrisB
Jeil, jeil. Ohne Worte.