Forum Doku Wiki Blog

Forumsarchiv 2011, März
array_combine für zweidimensionales array

archivierte Beiträge lesen

  1. (PHP) array_combine für zweidimensionales array von Hübi, 09. 03. 2011, 12:13

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 12:13 Uhr von Hübi veröffentlicht.


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ß

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 12:24 Uhr von auchHübi veröffentlicht.

Sorry der erste Satz muss lauten:

Wie kann ich von einer numerischen Indizierung einer 2 - dimensionalen Variablen zu einer alphanumerischen Indizierung gelangen.

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 12:28 Uhr von Tom veröffentlicht.

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



--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 12:48 Uhr von Hübi veröffentlicht.

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?

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 12:53 Uhr von dedlfix veröffentlicht.

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!

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 12:59 Uhr von Hübi veröffentlicht.

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.

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 13:13 Uhr von dedlfix veröffentlicht.

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!

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 13:20 Uhr von Hübi mit Vorschlag veröffentlicht.

> 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.

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 13:27 Uhr von ChrisB veröffentlicht.

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


--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 15:26 Uhr von Hübi veröffentlicht.

> 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??






array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 15:29 Uhr von ChrisB veröffentlicht.

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


--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

array_combine für zweidimensionales array

Der folgende Beitrag wurde am 09. 03. 2011, 15:38 Uhr von Hübi veröffentlicht.

Jeil, jeil. Ohne Worte.

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4