| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Gast
Beiträge: n/a
| Strinbestandteil in Array suchen, Wildcardprinzip
Hi zusammen, ich habe einen Prototype für die Suche von Strings in Arrays aus dem Forum übernommen. PHP-Code: Mittels dieses Prototypes kann ich Strings im Array suchen. Die Suchstrings werden durch einen Key.Listener erzeugt, wobei eine Suche immer aus exakt 8 Zeichen bestehen muss. PHP-Code: So… das klappt wunderbar und einwandfrei. Wenn ich 88888888 eintippe und dieser dann im array ist, wird das aufgerufen. Mein Anliegen ist nun, das ich gerne mit Wildcards arbeiten möchte… unszwar am Anfang und am Ende der Arraystrings. Im Array steht nun z.B. 89****** Eine Suche nach 89111111, 89123456, 89XXXXXX, sollte demnach immer ein Ergebnis zurückgeben, sobald die Zahlenfolge 89 am Anfang entdeckt wird. Mit anderen Worten… man vergleicht nicht nur einem String direkt mit den WErten im Array, sondern geht jeden Wert im Array entsprechend seiner Zeichenlänge durch und vergleicht so Zeichen für Zeichen. Immer dann, wenn im Array ein * (Wildcard) im String ist, dann ist der Vergleich egal und es wird die nächste Stelle verglichen. Ich werde jetzt mal versuchen, den Array Prototype dahingehend zu erweitern, das ich eine for-schleife für den Vergleich einbaue… ich würde mich trotzdem über ein paar Vorschläge und Ideen eurerseits freuen ![]() Meine Ergebnisse stelle ich unabhängig davon dann hier vor. Liebe Grüße Coffeemaker |
|
| | #2 (permalink) |
| Gast
Beiträge: n/a
|
Naja, Krückencode… aber funktioniert… PHP-Code: Der Array wird durchwandert und dann jeder String im entsprechenden Element Zeichen für Zeichen verglichen… ist ne Wildcard drin, dann machts nix, wenn es nicht passt. Jeder Treffer wird registriert… und jede Wildcard auch. Am Ende ziehe ich dann die Menge der Wildcards von der Stringlänge ab und schaue so, ob die benötigte Anzahl von Wildcards erreicht ist. Wenn ja… dann geb ich den Arrayindex zurück. Return beendet dann die Schleife, soviel ich weiss. Ansonsten latscht der durch den ganzen Array und quittiert die Mühe am Ende mit return -1. Wenn jemand eine elegantere Methode hat… tell me ![]() Liebe Grüße Yves |
|
| | #3 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 17.284
|
viel unterschiedlicher ist es nicht. a) die array-elemente können auch unterschiedlich lang sein b) es können auch mehrere elemente zu dem pattern passen Code: Array.prototype.indexOf = function(pattern) {
var found_ary = [];
var pattern_len = pattern.length;
var i = this.length;
while (i--) {
if (this[i].length == pattern_len) {
var ok = true;
var j = pattern_len;
while (j--) {
var charP = pattern.charAt(j);
if (charP != '*') {
if (charP != this[i].charAt(j)) {
ok = false;
break;
}
}
}
if (ok) {
found_ary.push(i);
}
}
}
return found_ary;
};
//
var test_ary = ["Unterschiedlich", "Maus", "Auto", "Haus"];
var found_ary = test_ary.indexOf("*au*");
trace("gefunden: "+found_ary);
var i = found_ary.length;
while (i--) {
trace(test_ary[found_ary[i]]);
}
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (02-02-2006 um 18:18 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |