[ChAoZ]
Rear Admiral
- Registriert
- Jan. 2010
- Beiträge
- 5.305
Hallo zusammen,
etwas ganz simples.
Ich habe ein Json (Request) wie das hier:
oder wie das hier:
oder sowas:
Nun muss ich feststellen ob die Daten sich unterscheiden (Session <> Payload), und wenn ja, updaten (DB/Session), sonst nicht.
Mal ist eine E-Mail Adresse drin, mal ein ganzer Datensatz des Kunden, also unterschiedlicher Payload.
Meine Methode zum Ermitteln der Unterschiede sah bisher so aus:
Nun, das ist kein schöner Code. Ich würde es gern ändern.
Das Problem ist nur, ich habe auch "nicht relevante" Werte in Payload.
Einfach mit array_diff geht es also nicht, da so auch "nicht relevante" Werte als Unterschied ausgewiesen werden. Daher ist meine Methode so, wie sie ist. Sie geht nur bestimmte, vordefinierte Werte durch und guckt ob sich der Wert unterscheidet (natürlich ist die Methode deutlich größer als hier abgebildet).
Wie kann ich das Ganze schöner gestalten, ohne dass die Komplexität extrem zunimmt und der Code unleserlich wird? Wenn es nicht möglich ist, dann lasse ich es so...
Danke euch
etwas ganz simples.
Ich habe ein Json (Request) wie das hier:
JSON:
{
"title": "none",
"salutation": "Herr",
"dateOfBirth": "26.10.1996"
}
oder wie das hier:
JSON:
{
"email": "max.muster@domain.tld",
"nichtRelevanterWert": "vielleicht"
}
oder sowas:
JSON:
{{
"firstnname": "Max",
"lastname": "Muster",
"lastname2": "",
"nichtRelevanterWert": "ja"
}
Nun muss ich feststellen ob die Daten sich unterscheiden (Session <> Payload), und wenn ja, updaten (DB/Session), sonst nicht.
Mal ist eine E-Mail Adresse drin, mal ein ganzer Datensatz des Kunden, also unterschiedlicher Payload.
Meine Methode zum Ermitteln der Unterschiede sah bisher so aus:
PHP:
$firstname = $payload->get('firstname');
if (null !== $firstname && $firstname !== $session->getCustomer()->getFirstname()) {
$diff->add('firstname', $firstname);
}
$lastname = $payload->get('lastname');
if (null !== $lastname && $lastname !== $session->getCustomer()->getLastname()) {
$diff->add('lastname', $lastname);
}
$lastname2 = $payload->get('lastname2');
if (null !== $lastname2 && $lastname2 !== $session->getCustomer()->getLastname2()) {
$diff->add('lastname2', $lastname2);
}
$dateOfBirth = $payload->get('dateOfBirth');
if (null !== $dateOfBirth && $dateOfBirth !== $session->getCustomer()->getFormattedDateOfBirth()) {
$diff->add('dateOfBirth', $dateOfBirth);
}
$email = $payload->get('email');
if (null !== $email && $email !== $session->getCustomer()->getEmail()) {
$diff->add('email', $email);
}
// usw.
Nun, das ist kein schöner Code. Ich würde es gern ändern.
Das Problem ist nur, ich habe auch "nicht relevante" Werte in Payload.
Einfach mit array_diff geht es also nicht, da so auch "nicht relevante" Werte als Unterschied ausgewiesen werden. Daher ist meine Methode so, wie sie ist. Sie geht nur bestimmte, vordefinierte Werte durch und guckt ob sich der Wert unterscheidet (natürlich ist die Methode deutlich größer als hier abgebildet).
Wie kann ich das Ganze schöner gestalten, ohne dass die Komplexität extrem zunimmt und der Code unleserlich wird? Wenn es nicht möglich ist, dann lasse ich es so...
Danke euch