Hallo, ich möchte Objekte vergleichen und dabei feststellen, ob die öffentlichen Eigenschaften identisch sind.
Für den Import von Daten möchte ich vorher prüfen, ob ein solcher Datensatz bereits vorliegt, auch wenn es keinen eindeutigen Primärschlüssel gibt, der eine Identifikation möglich machen würde.
So habe ich eine erste Idee einer Methode geschrieben und nach einigen Tests zeigt sich, dass das passiert, was ich erwarte.
In der Anwendung:
Während des ersten "Durchlaufes" speichere ich jeweils die Daten in der Datenbank und erzeuge über die oben gezeigte Methode einen Hash, denn ich auch in der Datenbank für jeden Datensatz speichere. Während des Durchlaufes und bei späteren Importen wende ich die Methode auf alle zu speichernden Objekte an und prüfe, ob ein solches "Objekt" schon existiert. Während des Vorgangs entferne ich ggf. Daten aus dem Objekt, die sich ggf. ändern könnten, aber keine Interpretation als "neu" zulassen sollen.
Meine Fragen nun dazu: Übersehe ich etwas? Gibt es noch einen einfacheren Weg, zwei Objekte in dieser Art zu vergleichen?
Wie eindeutig ist ein so erzeugter Hash bei einem Datenvolumen von ca. 100.000 Datensätzen?
Lässt sich das Ganze optimieren?
Viele Grüße
ec
Für den Import von Daten möchte ich vorher prüfen, ob ein solcher Datensatz bereits vorliegt, auch wenn es keinen eindeutigen Primärschlüssel gibt, der eine Identifikation möglich machen würde.
So habe ich eine erste Idee einer Methode geschrieben und nach einigen Tests zeigt sich, dass das passiert, was ich erwarte.
PHP-Code:
public static function hashObject($obj, $ignore = null)
{
$clone = clone $obj;
if (is_array($ignore))
{
foreach ((array)$ignore as $key)
{
if (isset($clone->{$key}))
{
unset($clone->{$key});
}
}
}
return md5(serialize($clone));
}
Während des ersten "Durchlaufes" speichere ich jeweils die Daten in der Datenbank und erzeuge über die oben gezeigte Methode einen Hash, denn ich auch in der Datenbank für jeden Datensatz speichere. Während des Durchlaufes und bei späteren Importen wende ich die Methode auf alle zu speichernden Objekte an und prüfe, ob ein solches "Objekt" schon existiert. Während des Vorgangs entferne ich ggf. Daten aus dem Objekt, die sich ggf. ändern könnten, aber keine Interpretation als "neu" zulassen sollen.
Meine Fragen nun dazu: Übersehe ich etwas? Gibt es noch einen einfacheren Weg, zwei Objekte in dieser Art zu vergleichen?
Wie eindeutig ist ein so erzeugter Hash bei einem Datenvolumen von ca. 100.000 Datensätzen?
Lässt sich das Ganze optimieren?
Viele Grüße
ec
Kommentar