PDA

View Full Version : **Multidimensional Array Expert Needed**



newenay
October 29th, 2009, 02:43 PM
Need some help parsing some .xml into a rather tricky array. I'm not sure if AS3 arrays work past the second node -- "array[0][1].link", but this works fine..."array[0].link".

I have been reading about using an object instead of an array, as well as key & dictionarys, but am unsure how to implement.

Copy and paste into a new AS3 doc. Help is mucho appreciated :h:.



var xml:XML =
<courses>
<course name="Course One" id="0">
<doc name="Doc One">www.google.com</doc>
</course>
<course name="Course Two" id="1">
<doc name="Doc One">www.yahoo.com</doc>
<doc name="Doc Two">www.adobe.com</doc>
<doc name="Doc Three">www.kirupa.com</doc>
</course>
</courses>;
var courseArr:Array = new Array();
var docArr:Array = new Array();
var il:XMLList = xml.course;
//var ml:XMLList = xml.course.doc;
for(var i:uint=0;i<il.length();i++){
courseArr[i] = new Array(il.@name[i],il.@id[i]);
docArr[i] = new Array(il.@id[i]);

trace(courseArr[i][0]);

for(var n:uint=0;n<il[i].doc.length();n++){
//docArr[i].push(il[i].doc.@name[n],il[i].doc[n]);
docArr[i].push(il[i].doc.@name[n]);

//docArr[i][n]["theLink"] = il[i].doc[n];
trace(docArr[i][n+1] + "'s URL is: ");
trace( il[i].doc[n]);
}
trace("");
}
trace("How can I save each document's URL into the docArr???");

jloa
October 29th, 2009, 04:58 PM
var xml:XMLList = new XMLList("<data><course name='Course One' id='0'><doc name='Doc One'>www.google.com</doc></course><course name='Course Two' id='1'> <doc name='Doc One'>www.yahoo.com</doc><doc name='Doc Two'>www.adobe.com</doc><doc name='Doc Three'>www.kirupa.com</doc></course></data>;");

var courseArr:Array = [];

for(var i:int = 0;i < xml.course.length(); i++)
{
var courseObj:Object = {};
courseObj.id = xml.course[i].@id;
courseObj.name = xml.course[i].@name;
courseObj.courses = [];

var n:int = xml.course[i].doc.length();
for(var j:int = 0; j < n; j++)
{
courseObj.courses.push({name: xml.course[i].doc[i].@name, link: xml.course[i].doc[i]});
}

courseArr.push(courseObj);
}

for(i = 0; i < courseArr.length; i++)
{
trace("course", courseArr[i].id, courseArr[i].name);
for(j = 0; j < courseArr[i].courses.length; j++)
trace("\tcourse:",courseArr[i].courses[j].name, courseArr[i].courses[j].link)
}

AHernandez
October 29th, 2009, 05:41 PM
What you want to do is use an object. The method jloa posted above looks pretty good.

newenay
October 29th, 2009, 05:51 PM
This is awesome, a lot cleaner than the code I was working with. One small tweak and I am off to the races (are you testing me?? :hugegrin:).

You can obviously crank this out in your sleep, I will study it for days...thank you...thank you!

for(var j:int = 0; j < n; j++)
{
courseObj.courses.push({name: xml.course[i].doc[j].@name, link: xml.course[i].doc[j]});
}

N.D>

jloa
October 29th, 2009, 05:54 PM
U r welcome. If u have any futher questions, do not hesitate to ask
http://www.qtl.co.il/img/copy.pnghttp://www.google.com/favicon.ico (http://www.google.com/search?q=%5Bquote=newenay;2512674%5DThis%20is%20aw esome,%20a%20lot%20cleaner%20than%20the%20code%20I %20was%20working%20with.%20One%20small%20tweak%20a nd%20I%20am%20off%20to%20the%20races%20%28are%20yo u%20testing%20me??%20%29.%0D%0A%0D%0AYou%20can%20o bviously%20crank%20this%20out%20in%20your%20sleep, %20I%20will%20study%20it%20for%20days...thank%20yo u...thank%20you%21%0D%0A%0D%0Afor%28var%20j:int%20 =%200;%20j%20%3C%20n;%20j++%29%0D%0A%7B%0D%0Acours eObj.courses.push%28%7Bname:%20xml.course%5Bi%5D.d oc%5Bj%5D.@name,%20link:%20xml.course%5Bi%5D.doc%5 Bj%5D%7D%29;%0D%0A%7D%0D%0A%0D%0AN.D%3E%5B/quote%5D%0D%0A)http://www.babylon.com/favicon.ico