wahsaga: Suchaufwand

Beitrag lesen

hi,

Für die Domain "mail.domain.com" soll aber obwohl "domain.com" die Eigenschaft Wildcards "True" besitzt, der Wert "D" zurückgegeben werden.

das verstehe ich nicht - in deiner beispiel-tabelle steht doch bei mail.domain.com ein _C_? tippfehler?

Ich hab mir überlegt ob es mit Javascript möglich ist und es sich lohnt eine Baumstruktur aufzubauen?

binärer suchbaum mit alphabetischer ordnung ...?
lohnt sich m.E. für so ein szenario nicht.

Wie würdet ihr das realisieren?

mein erster gedanke: mit einem mehrdimensionalen assoziativen array.

die "wertetabelle"
domain.com                   True               B
mail.domain.com              False              C
scanner.mail.domain.com      True               A
anderedomain.de              False              A

wird umgesetzt als:

(werte["com"]["flag"] = false;)
werte["com"]["domain"]["flag"] = true;
werte["com"]["domain"]["eigenschaft"] = "B";
werte["com"]["domain"]["mail"]["flag"] = false;
werte["com"]["domain"]["mail"]["eigenschaft"] = "C";
werte["com"]["domain"]["mail"]["scanner"]["flag"] = false;
werte["com"]["domain"]["mail"]["scanner"]["eigenschaft"] = "C";
(werte["de"]["flag"] = false;)
werte["de"]["anderedomain"]["flag"] = false;
werte["de"]["anderedomain"]["eigenschaft"] = "A";

die ebenen in klammern nur für den fall, dass du sie beim durchgehen brauchst. wenn du jeweils erst ab der zweiten ebene an zu suchen fangen willst, kannst du sie ggf. weglassen.)

dann den zu suchenden term mit split() am punkt zerlegen, und von hinten durchgehen:

mail.domain.com -> "com", "domain", "mail"
existiert werte["com"]? ja
existiert werte["com"]["domain"]? ja
existiert werte["com"]["domain"]["mail"]? ja -> eigenschaft hat dort den wert "C"

gibtsnich.domain.com -> "com", "domain", "gibtsnich"
existiert werte["com"]? ja
existiert werte["com"]["domain"]? ja
existiert werte["com"]["domain"]["gibtsnich"]? nein
hat werte["com"]["domain"]["flag"] den wert true? ja
-> wert für gibtsnich.domain.com ist werte["com"]["domain"]["eigenschaft"] = "B"

auchnich.anderedomain.de -> "de", "anderedomain", "auchnich"
existiert werte["de"]? ja
existiert werte["de"]["anderedomain"]? ja
existiert werte["de"]["anderedomain"]["auchnich"]? nein
hat werte["de"]["anderedomain"]["flag"] den wert true? nein
(hat werte["de"]["flag"] den wert true? nein)
-> es wird "E" zurückgegeben

am einfachsten zu machen, wenn du dir, sobald du auf einer ebene einen treffer gefunden hast, dessen wildcard-flag true ist, immer dessen wert schon mal als ergebnis merkst - und ggf. in der nächsten ebene überschreibst, wenn dort auch noch ein treffer gefunden werden sollte.
(und auf "nullter" ebene natürlich mit ergebnis ="E" starten, als fallback für die fälle, für die es überhaupt keinen treffer gibt.)

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }