Ich will ein assoziatives Array, welches mir sowohl Wert, Name und auch Inize speichert.
Also in etwa so etwas:
while( $db\_temp = mysql\_fetch\_array( $result ,MYSQL\_NUM)){
for( $col=0; $col
Gruß Sebastian
Zum Verständnis von mysql\_fetch\_array():
mysql\_fetch\_array() ist eine erweiterte Version von mysql\_fetch\_row(). Die Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays abgelegt, als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen Indizes werden die Feldnamen benutzt.
Ein erster Ansatz…
ich weiss aber nicht ob mich das weiterbringt.
Also
über
array_keys ($array, „blau“); // liefert array (0, 3, 4)
kann ich Schlüsselnamen von Werten bekommen.
Bei mehrmals gleichen Werten wird es kompliziert…
Eine Lösung lieg auf der Hand (allerdings wenig ellegant):
Es muss Zwischengespeichert werden, welche Schlüsselnamen bereits verwendet wurden, und dann gegebenenfalls der nächste Schlüsselnamen verwendet werden.
Das ist mir aber irgendwie eine zu aufgebauschte Lösung.
Es muss doch was schlankeres geben.
Die Id haben wir ja schon… irgendwie muss doch eine Verbindung über ID und Schlüsselnamen existieren ?
Bleibt Reihenfolge gut,wenn Keys in extra Array ?
Vielleicht sollte ich alle Keys von $db_temp
in ein Key-Array ablegen ?
Aber decken sich dann immer die Indizies des Key-Array mit den Indizies von $db_temp ?
Und wenn nein kann man Sie irgendwie danach sortieren ?
Zur Erinnerung:
while( $db_temp = mysql_fetch_array( $result ,MYSQL_NUM)){ …
ich versteh dein problem nicht ganz, per fetch_row hast du doch einen prima array, der assoziativ & indiziert ist…
mit einer foreach schleife oder einem standard while(list($k,$v)=each($arr)) kommst du doch prima an indizes und namen der spalten, also: was willst du denn genau erreichen ?
sorry war krank… und erkläre noch mal ganz genau
Hallo gecko, sorry das ich nicht mehr geantwortet hatte, aber ich lag mit Fieber in der Haie… war zimlich gaga.
Ich finde auch das ich mein Problem nicht so arg schön geschildert htte, deshalb noch mal ein netter neuer Versuch.
Vielleicht ist es ja auch ganz einfach und ich hab Tomaten auf den Augen.
Situation ist die:
Es existiert ein Textfile, welches SELECTS enthält.
Es existiert ein PHP- Script, welches die SELECTS liest.
Die Ergebnisse werden wieder in das Text- File eingeparst, jedoch können die Stellen unterschiedlich markiert sein.
Ein Beispiel:
„SELECT tel, name FROM adresse WHERE id = 1“ steht im Textfile.
Das Script findet diesen SELECT führt diesen Select über
$db_temp = mysql_fetch_array( $result , MYSQL_BOTH ) aus.
Das Script setzt Ergebnisse folgendermasen in das Textfile ein.
Überall da wo [tel] steht wird der Wert der Spalte tel eingesetzt. Ebenso wo [0] steht. Wo [name] oder [1] steht wird der Wert von Spalte name eingesetzt.
Das funktioniert gut über $db_temp[‚id‘] bzw. $db_temp[0] usw.
Es kann also einfach der gefunden Textteil als Schlüssel in $db_temp verwendet werden um den entsprechenen Wert zu erhalten.
In dem Textfile gibt es aber auch Stellen die [++] heisen.
Was dort eingesetzt werden muss hängt davon ab, was eben zuvor eingesetzt wurde.
Aangenommen der Select wurde gefunden und noch nichts eingesetzt, so reagiert das Script auf den ersten [++] mit dem zweiten Wert, interne Zeiger am Anfang immer auf Null steht. D.h. es wird der erste Wert , also der Wert von Spalte tel eingesetzt und der interne Zeiger auf 1 gesetzt.
Bei dem nächsten aufruf von [++] wird der interne Zeiger von 1 auf 2 gesetzt usw.
Es sind jetzt verschiedene Folgen im Textfile vorstellbar:
Z.B. [0] [++]
Da wüde also zuerst der Wert für tel und dann der Wert für name eingesetzt. Und am Ende steht der interne Zeiger auf 1.
Wie ist es aber mit :
[name] [++] ?
Richtig wäre das zuerst der Wert der Spalte name ausgegeben würde (dabei der interne Zeiger auf 1 gesetzt würde), für [++] nichts ausgegeben würde weil es keinen dritte Spalte gibt.
Das Problem bei dieser Folge ist nun den internen Zeiger beim Vorkommen von [name] zu setzen.
Warum ?
Nun im Script habe ich ja in dem Moment nur ein Array ( $db_temp ) und in einer Variablen einen Spaltennamen ( hier also ‚name‘ ).
Ich kann nun einfach $db_temp[$spaltenname] machen um den Wert zu erhalten. Aber wie setze ich den internen Zeiger ?
Denkbar wäre eine Schleife die die Wert vergleicht… Etwa so:
if ( $db_temp[$spaltenname] == $db_temp[$i] ){
Nummer der Spalte ist gleich $i.
D.h. der interne Zähler ist gleich $i
}
Das würd sicherlich oft funktionieren, so lange ein Select nicht mehrere gleiche Werte ausgibt. Zu dem wäre es auch noch eine langsame Methode weil eine extra Schleife eingesetzt würde.