PHP Assoziatives Array in Indiziertes wandeln

unXtremo

Ensign
Registriert
Feb. 2009
Beiträge
228
Hallo zusammen, habe gerade ein etwas seltsames Problem:

Ich habe eine Datenbank Abfrage, die ich per assoziativem Array in einer While Schleife ausgebe.
Ich will aber aus dem ausgegebenen Array einen String mit Impode machen, dazu muss ich ja das assoziatives Array ($row) in ein Indiziertes ($array) wandeln ich habe es bisher so gemacht wie unten.
PHP:
while($row = mysql_fetch_assoc($result))
	{
		$array[] = $row['user'];
	}
$string = implode(", " , $array);
echo $string;

Zunächst dachte ich auch, dass das in etwa so passt, mir ist aber schnell aufgefallen, das ich hier einen Denkfehler drin habe, so wird das $array in der While schleife immer nur erweitert, damit habe ich am Ende einen String der nicht stimmt.

Bsp Ausgabe:
1, 2, 3, 4
1, 2, 3, 4, 4
1, 2, 3, 4, 4, 3, 2

dabei wäre richtig:
1, 2, 3, 4
4
3, 2

Ich komme leider gerade nicht ganz darauf wie man das richtig angeht.
Vielleicht kann mir jemand schnell auf die Sprünge helfen.

PS:
Ich habe schon gegesucht und folgendes gefunden:
http://de.php.net/manual/en/function.implode.php#84644
http://blog.richardknop.com/2009/07/implode-an-associative-array/
komme aber trotzdem leider nicht weiter.
 
Ich habe das Problem ehrlich gesagt nicht wirklich verstanden.

Mir ist nicht mal klar, wie es bei dir zu mehreren Ausgaben kommt..
vielleicht einfach mal vor der Schleife machen "unset($array);"...
 
Achso waraum es mehrere Ausgaben sind:
das ganze befindet sich noch in einer weiteren while-Schleife von einer vorherigen Abfrage, das soll auch so sein. mein Problem ist nicht, das es mehrere Ausgaben gibt, sondern, dass $array nicht dem indizierten Gegenstück von $row entspricht!
ich habe ja mehrere Datensätze, die ich mit der Abfrage nacheinander ausgebe und für jeden Datensatz gibt es verschiedene Werte im Feld 'user' diese daten möchte ich auslesen und in ein idiziertes Array schreiben ($array) welches ich dann über implode, in einen String wandeln möchte und diesen dann dem entsprechenden Datensatz ausgeben will.
 
Mal so nachgefragt:

Warum ist es Dir nicht möglich das ganze mit einer SQL-Abfrage so aufzubereiten, das man direkt zur Ergebnismenge kommt und entsprechend dann die Ausgabe in einem einfachen foreach-Konstrukt zwecks Ausgabe (oder als Return Array / Objekt) aufbereitet?
 
PHP:
$i=0;
while($row = mysql_fetch_assoc($result))
{
	$array[$i][] = $row['user'];
        $i++;
}

foreach ($array as $arr)
{
        $str = implode(",",$arr);
}

So müsste jeder $str einer Zeile deiner gewünschten Ausgabe entsprechen ...
 
@ 1668mib:
Tatsächlich, das mit unset() hat geholfen!!!

@ excalibur1976:
Das wäre schon denkbar, ich war jetzt nun mal bei diesem Ansatz und habe damit das Grundkonzept nicht mehr überdacht.

@ lamumbax:
auf die schnelle komme ich hier nicht direkt auf das Ergebnis, welches ich haben wollte.

Danke an alle!
Problem gelöst, dache mir das ich irgendeine Kleinigkeit vergessen hatte.
 
@ excalibur1976:
Das wäre schon denkbar, ich war jetzt nun mal bei diesem Ansatz und habe damit das Grundkonzept nicht mehr überdacht.

Nur eine kleine Anregung:

Was spricht zum jetzigen Zeitpunkt gegen ein Refactoring? In diesem Kontext wäre der Einsatz von prepared Statements, Transactions und der Einsatz von PDO als Datenbankabstraktionsebene (oder auch mysqli) sicherlich optimaler. Evt spart man sich auch unnötige Datenbankabfragen, indem man zu Cachingmethoden wie Userspace Objekte in memcache oder apc nutzt.

Der kleine "Bugfix" löst zwar das Problem, aber man läuft halt "Gefahr" das der Quellcode zu unflexibel wird und im Laufe der Zeit sich schlechter erweitern lässt.
 
Ok, da spreche ich wohl mit einem Profi ;)

bei den vielen Fachbegriffen muss ich erst mal schauen ob ich alles richtig verstehe:
  • prepared Statements: zum Schutz vor SQL-Injection habe ich für später vorgemerkt, wenn ich die Grundfunktion fertiggestellt habe werde ich alle Abfragen escapen
  • PDO ist noch etwas zu hoch für mich, da ich mit OOP noch nicht so gut zurecht komme
  • mysqli habe ich schonmal gesehen, jedoch keinen Unterschied bemerkt, da ich eben nicht mit OOP zurecht komme
  • Transactions habe ich ebenfalls schon von gelesen, wüsste nur jetzt nicht genau wie ich die anwenden könnte.
  • Userspace Objekte beziehen sich wieder auf die Objektorientierung
Vielen Dank excalibur1976, für deine Anregungen!
Um das alles umsetzen zu können, bräuchte ich jedoch professionelle Hilfe wie mir scheint.
 
Jeder fängt mal klein an, auch excalibur1976 tat das... je nach Sinn deiner Seite ist das, was du machst, ja auch ausreichend. Natürlich geht es besser - das tut es immer...
 
schon, dessen bin ich mir bewusst, und ich weiß auch noch nicht ob ich mit meinen Kenntnissen tatsächlich mein Projekt realisieren kann, bisher hat jedoch alles geklappt.

Mich ärgert es nur immer, dass alle mit OOP arbeiten, da komme ich mir mit der herkömmlichen Programmierung immer so wie ein Dinosaurier vor. Ich habe zwar schon so einiges über OOP gelesen, nur kann ich das dann abgesehen von Nutzlosen Beispielen nicht auf ein reales Projekt übertragen.
 
unXtremo schrieb:
schon, dessen bin ich mir bewusst, und ich weiß auch noch nicht ob ich mit meinen Kenntnissen tatsächlich mein Projekt realisieren kann, bisher hat jedoch alles geklappt.

Mich ärgert es nur immer, dass alle mit OOP arbeiten, da komme ich mir mit der herkömmlichen Programmierung immer so wie ein Dinosaurier vor. Ich habe zwar schon so einiges über OOP gelesen, nur kann ich das dann abgesehen von Nutzlosen Beispielen nicht auf ein reales Projekt übertragen.

Dann stelle doch Dein Projekt, sofern erwünscht, an geeigneter Stelle vor. Evt. findet sich der eine oder andere Mithelfer / Entwickler. :D

Klar, in meiner Anfangszeit war ich sehr froh das Usenet als Unterstützung zu haben. Designpatterns, MVC, Frameworks wurden lange von mir umgangen. ;)
 
Zuletzt bearbeitet:
Zurück
Oben