| |||||||
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) |
| // Knäckebrot Registriert seit: Mar 2002 Ort: München
Beiträge: 283
| arrays erstellen und sortieren nach array inhalt
guten abend... ich weiß, ich frage heute oft und viel hier, aber ich bin anscheinend am entscheidenden punkt angelangt... ![]() ich suche hier keine korrrektur, sondern vielmehr einen ansatz. folgede situation... ich habe ein xml das z.b. folgenden knoten enthält: Code: <item> <land>CH</land> <name>2</name> <strasse>3</strasse> <plz>4</plz> <ort>5</ort> <tel>6</tel> <fax>7</fax> <mail>8</mail> <mailto>9</mailto> <www>10</www> <url>11</url> </item> es sollen nun alle ausgelesen werden, nach "land" sortiert und jeweils einem array zugewiesen werden... ich habe das "befüllen" des xmls so organisiert, dass die länderkürzel, wie "CH" immer gleich vorhanden sind und so ein wert da ist, denn man zum sortieren hernehmen kann... ich möchte also im prinzip ein array mit allen adressen in "CH" haben, eins mit allen aus "A", allen aus "D" usw... das ich mit dem sortieren eines xmls nach einem bestimmten wert keine erfahrung habe und auch denke eine vorsortierung im php macht auch nicht soviel sinn (woher soll dann flash wissen, wann "A" aufhört und "D" beginnt), suche ich nun nach einem ansatz, wie ich das anstellen kann... das sortierte array mit z.b allen stadtorten aus "CH" müsste ja dann 2dimensional sein, damit ich die anderen werte die im eintrag des arrays erster dimension liegt ja auch ansprechen kann... die interne anfrage der einzelnen unterknoten hab ich schon gelöst und mache das bisweilen so: Code: function ladeXML() {
haendler_xml = new XML();
haendler_xml.ignoreWhite = true;
haendler_xml.load(xml_h_var);
haendler_xml.onLoad = function() {
land_array = new Array();
name_array = new Array();
strasse_array = new Array();
plz_array = new Array();
ort_array = new Array();
tel_array = new Array();
fax_array = new Array();
mail_array = new Array();
mailto_array = new Array();
www_array = new Array();
url_array = new Array();
for (var b = 0; b<haendler_xml.firstChild.childNodes.length; b++) {
land_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[0].childNodes;
name_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[1].childNodes;
strasse_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[2].childNodes;
plz_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[3].childNodes;
ort_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[4].childNodes;
tel_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[5].childNodes;
fax_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[6].childNodes;
mail_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[7].childNodes;
mailto_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[8].childNodes;
www_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[9].childNodes;
url_array[b] = haendler_xml.firstChild.childNodes[b].childNodes[10].childNodes;
}
geladen_h();
checkTextLength();
};
}
//////////////////////////////////////////////////////////////////////////////////
this.LadeObjX = new LoadVars();
this.LadeObjX.load(xml_h_var);
this.LadeObjX.onLoad = ladeXML; ich bedanke mich schon mal für durchlesen und freu mich auf konstruktives ![]() gruß tom |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.321
|
a) xml's werden nicht sortiert! ist ja so, als wenn du alle (ab)sätze in einem buch alphabetisch sortieren würdest. da käme auch nichts gescheites dabei heraus. b) ja dann mach doch ein 2d array. wo ist das problem? Code: function fPrint(a) {
for (var i = 0; i<a.length; i++) {
trace(a[i].name+" // "+a[i].ort);
}
}
var a:Array = new Array();
a.push({name:"bbb", ort:"xxx"});
a.push({name:"aaa", ort:"yyy"});
a.push({name:"bbb", ort:"yyy"});
a.push({name:"aaa", ort:"xxx"});
//
a.sortOn(['name', 'ort']);
fPrint(a);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Jun 2001 Ort: Bern, Schweiz
Beiträge: 121
|
Ich hatte gerade eine änliche Sache, bei welcher ich XML-Einträge nach Datum sortieren musste: PHP-Code: Aufrufen kannst du den gewünschten Wert dann zum Beispiel so: ArrVisitors[i].vname
__________________ Remo **************** strengen denkt an! **************** Geändert von Remo (12-09-2006 um 13:39 Uhr) |
| | |
| | #4 (permalink) |
| experience++; Registriert seit: Jul 2002 Ort: Düsseldorf
Beiträge: 11.347
|
hatte mal in flashmx einen array prototype geschrieben der 2d arrays sortieren kann. vielleicht ist das ja was: [stuff] multidimensionales array sortieren -> prototype cya, sal
__________________
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme! |
| | |
| | #6 (permalink) |
| // Knäckebrot Registriert seit: Mar 2002 Ort: München
Beiträge: 283
| hi remo, ich hab zu deinem script noch ne frage: in der zitierten zeile schreibst du die 3 parameter in die funktion, aber ich versteh nicht ganz, was du da übergibst, und wie du die funktion dann aufrufst... vsex wird in der funktion ja noch weiterverwendet, die andern beiden nicht... *grübel* ansonsten hilft mir das schon etwas, da es wirklich in eine ähnliche richtung geht... danke, tom |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Jun 2001 Ort: Bern, Schweiz
Beiträge: 121
|
Entschuldige modul47, ich habe die funktion aus einer bestehenden Applikation herauskopiert. Dort konnte dann mit den Parametern vsex, vstatus, und vteaser beim Befüllen des Arrays nach Kriterien abgefüllt werden. Der Selektionsteil habe ich beim Post im Forum herausgelöscht, nicht aber die Funktionsparameter. Du kannst die Funktion also einfach mit function createArrVisitors(); aufrufen und die Parameter bei der Funktion in den runden Klammern löschen. Die Funktion "sucheKnotenbezeichnung" ist übrigens recht hilfreich für mich, denn so werden auch die richtigen Elemente herausgelesen, wenn oberhalb neue Elemente hinzukommen, ohne dass sich dann alles verschiebt. ...so, bin auf dem Sprung in die Ferien. Viel Erfolg bei deinem Vorhaben.
__________________ Remo **************** strengen denkt an! **************** |
| | |
| | #9 (permalink) |
| // Knäckebrot Registriert seit: Mar 2002 Ort: München
Beiträge: 283
|
hello, nochmal... nachdem ich mir jetzt mit der funktion von Remo einen abgebrochen habe und auch mit dem prototypen von salazar nicht weit gekommen bin, habe ich mir selbst was überlegt, was genau meinen zweck erfüllen könnte... nur bekomm ichs irgendwie vom ablauf her nicht so richtig hin.. ich lese nun das xml in das array ein, möchte aber nur die, die unter dem ersten unterknoten des knotens "CH" stehen haben in ein neues array schreiben und zwar dann den kompletten knoten, also CH,a,b,c,d.... (alle 11 einträge). dann könnte ich das array "CH" super weiterverarbeiten... ich hab zwar die abfrage hinbekommen, denk ich jedenfalls, aber mehr auch nicht... mein ansatz: Code: createArr();
function createArr(){
Arr_CH = new Array();
for (var de=0; de<haendler_xml.firstChild.childNodes.length; de++) {
faktor = haendler_xml.firstChild.childNodes[de].childNodes[0].childNodes
if (faktor = "CH") {
Arr_CH[de] = new Array();
for (var cx=0; cx<haendler_xml.firstChild.childNodes[0].childNodes.length; cx++) {
Arr_CH[de][cx] = haendler_xml.firstChild.childNodes[de].childNodes[cx].childNodes;
}
}
}
} bitte helft mir, danke, tom |
| | |
| | #10 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.321
| Code: test = '<items>';
test += '<item><land>CH</land><name>aaa</name><strasse>aaa</strasse></item>';
test += '<item><land>DE</land><name>bbb</name><strasse>bbb</strasse></item>';
test += '<item><land>CH</land><name>ccc</name><strasse>ccc</strasse></item>';
test += '</items>';
haendler_xml = new XML(test);
haendler_xml.ignoreWhite = true;
//
function fXML_parsen(_xml, _ary) {
do {
switch (_xml.nodeName) {
case "items" : fXML_parsen(_xml.firstChild, null); break;
case "item" :
var temp = fXML_parsen(_xml.firstChild, {});
if (temp.land == filter) Arr.push(temp);
break;
default : _ary[_xml.nodeName] = _xml.firstChild.nodeValue; break;
}
} while (_xml=_xml.nextSibling);
return _ary;
}
function fXML_print(_ary) {
for (var i = 0; i<_ary.length; i++) {
trace(_ary[i].land+" // "+_ary[i].name+" // "+_ary[i].strasse);
}
}
//
Arr = [];
filter = 'CH';
fXML_parsen(haendler_xml.firstChild, null);
fXML_print(Arr);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (16-09-2006 um 20:19 Uhr) |
| | |
| | #11 (permalink) |
| // Knäckebrot Registriert seit: Mar 2002 Ort: München
Beiträge: 283
|
super! danke für diese antwort. jetzt hab ichs hinbekommen. das ding läuft jetz prima und macht was es soll... danke für die hilfe... noch ne frage am rand, wo ich im forum und in der hilfe nix gefunden habe: kann man denn in flash überhaupt arrays mit variable-erstellen also z.b. in ner schleife, oder dynamisch per funkion mit ner id oder so? also beispielsweise in der art: Code: array_land_[id]_A = new Array(); wenn ich dann aber das ganze mit dem index versehen will z.b. so: Code: for.... array_land_[id]_A[i] = xml.firstChild..... wie gesagt, hab da nichts gefunden und is auch eher was aus interesse, was hier jezt nicht so wichtig ist... auf jedenfall danke allen bis dahin, grüße tom |
| | |
| | #12 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.321
|
"..kann man denn in flash überhaupt.." geht alles. und wenn error, dann gibts auch eine erklärung dafür. musst nur das konkrete beispiel hier posten. das hier ist zu allgemein gehalten array_land_[id]_A = new Array(); und auch falsch. wenn dann so (natürlich ohne --><-- nur der punkt fehlt): array_land_[id]-->.<--_A = new Array();
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #13 (permalink) |
| // Knäckebrot Registriert seit: Mar 2002 Ort: München
Beiträge: 283
|
hm... das war ja mein konkretes beispiel ![]() ich wollte, das dann arrays rauskommen wie array_land_1_A array_land_2_A array_land_3_A ... das mit dem punkt kapier ich nich... is für mich ein trenner zwischen 2 elemtene eines pfades z.b. thx, tom |
| | |
| | #14 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.321
|
a so, also echt kronkret, das konkrete teil, must du krass voll tschecken ei ;-) suchst du sowas? var i=1; _root['array_land_'+i+'_A']=12; trace(array_land_1_A);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |