Mailinglisten-Archive |
Peter Holm wrote: > > Hi! > >serialize() - kann man auch wunderbar Arrays miteinander vergleichen. > > Hättest Du Lust, das mal etwas genauer zu erklären? Wie genau geht das? > > Was kann man denn noch alles mit serialize machen? serialize() wurde geschaffen, um Sessions in PHP zu ermöglichen. Mit "serializen" bezeichnet man den Prozeß eine Variable in ein speicherbares Format zu überführen, welches später mit unserialize() wieder in eine Variable überführt werden kann. Du speicherst also den Inhalt der Variablen z.B. auf der Festplatte, um ihn später wieder einzulesen. Dein Programm kann an der Stelle und in dem Zustand weitermachen wo es aufgehört hat. Damit diese Speicherung und Wiederherstellung klappt muß der Serializer für jeden Variablenwert eine eindeutige Darstellung liefern. serialize() liefert einen kryptischen String, dessen Entstehung völlig uninteressant ist. Wichtig ist, daß er für jeden Variablenwert eindeutig ist. Zu den Arrays. Wie würdest Du zwei Arrays in -PHP3- vergleichen? Bei einem direkten Vergleich, liefert PHP3 eine Warnung. Untenstehender Code produziert eine Fehlermeldung ("Warning: Cannot compare arrays or objects in FILE on line N"): <?php $a = array(1); $b = array(1); if ($a == $b) echo "identisch"; else echo "unterschiedlich"; ?> Du kannst jetzt entweder eine rekursive Funktion schreiben, um die Arrays zu vergleichen oder auf serialize() zurückgreifen. serialize() liefert einen String mit einer eindeutigen Darstellung des Inhalts. Diese Strings kannst Du miteinander vergleichen: <?php [...] if (serialize($a) == serialize($b)) echo "identisch"; else echo "unterschiedlich"; ?> Serialize() ist meiner Erfahrung nach schneller als eine eigene, selbstgeschriebene, rekursive Funktion zum Vergleich der Inhalte. PHP4 hat die ohnehin schon tollen Arrayfunktionen von PHP noch erweitert und erlaubt einen direkten Vergleich. Der kleine Trick über einen Serializer ist nicht mehr notwendig. Ulf
php::bar PHP Wiki - Listenarchive