Wie ein Array korrekt abspeichern (Datenbank/Datei)

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und php/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Administrator
Beiträge: 29106
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Wie ein Array korrekt abspeichern (Datenbank/Datei)

Beitrag von oxpus » Di 28.Jun, 2011 11:13

Ein Array stellt PHP mit allen Funktionen, die nicht für ein Array bestimmt sind immer "stur" mit dem Wort "array" dar.
Somit dann auch der falsche Wert in der Datenbank.
Daher muss ein Array vor dem Speichern immer erst mit implode als String umgewandelt werden.
Mit explode wird dann nach dem Auslesen der Daten aus dem Speicher dieses wieder in ein Array zurückgeführt.
Das klappt allerdings nur mit eindimensionalen Arrays, also z. B.

Code: Alles auswählen

$value = array(1 => 'Data');
nicht aber mit mehrdimensionalen Arrays wie

Code: Alles auswählen

$value = array(1 => array('Value1' => 'Data1'));
und damit fällt implode/explode hier aus.

In diesen Fälllen ist serialize die eindeutig bessere Wahl.
Diese Funktion verwandelt alle möglichen Daten (und Formate) in einen speicherbaren Wert und dieser kann dann mit unserialize wieder bequem in die ursprüngliche Form zurückgeführt werden (also z. B. nach dem Auslesen aus der Datenbank).

Allerdings gilt dabei zu beachten, dass der String, der mit serialize erstellt wird, länger ist, als der String, den implode erzeugt, sollte also ein mögliches implode nicht zwangsweise ersetzen.
serialize nimmt man meist auch eher für das Speichern von Werten in Dateien, z. B. für einen Cache.
Und noch ein Unterschied: serialize und unserialize benötigen ggf. eine Menge Speicher zum arbeiten.
Der steht auch nicht immer zur Verfügung.

Der Vorteil von serialize ist aber, dass man die Struktur der Daten auf keinen Fall verliert und ohne vorher irgend etwas konvertieren zu müssen die Daten speichern und später weiter verwenden kann.
Und gerade bei komplexeren Arrays ist das sehr von Vorteil.

Merke:
Eindimensionale Arrays mit implode nach festen Regeln oder mit serialize zum Speichern vorbereiten, mehrdimensionale Arrays lassen sich dagegen nur sinnvoll mit serialize zum Speichern aufbereiten.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per ICQ, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per ICQ, Email or PM. Each unasked message will be ignored!

Antworten