PDA

Volledige versie bekijken : Vraagje over Arrays...


gbolssens
%Europe/Berlin %476 %2005, 12:26
Hi allemaal,

Ik ben een tijdje geleden begonnen met het leren van PHP en ik vind 't helemaal te gek. Wat ik vooral een superfeature vind aan php is dat je gebruik kunt maken van zgn. "associatieve Arrays".

$var1 = Array("naam"=>"ikke", "Leeftijd"=>"28", "woonplaats"=>"LaLaLand");


Bestaat dit ook in A.S.?

Ik heb al ergens gelezen dat je gewoon een Object-object kunt aanmaken en dan zeggen:


mijnAssocAr = new Object();
mijnAssocAr["naam"] = "ikke";
mijnAssocAr["leeftijd"] = 28;
mijnAssocAr["woonplaats"] = "LaLaLand";


maar kan dit niet met de standaard Array-class in Flash? Of zou het te doen zijn de Array class te subclassen en 'm zo associatief te maken? ( ben niet zo super ervaren in AS2.0 ;) )

Bedankt voor alle reacties + greetz,
GB

Dauntless
%Europe/Berlin %479 %2005, 12:30
Over het algemeen wordt het object beschouwt als de flash vorm van een associatieve array... Je kan de Array class wel extenden maar 'k denk dat je dan ofwel gaat eindigen met het tóch in een object te steken of om 2 arrays bij te houden, 1 met de naam en 1 met de waarde ...

Roenes
%Europe/Berlin %493 %2005, 12:50
Waarom niet een gewone array gebruiken Dauntless? ;)

var arr:Array = new Array();
arr["Roenes"] = "Hier is Roenesje";
arr["Dauntless"] = "Dauntless is ook van de party";
arr["Gbolssens"] = "gbolssens komt ook gezellig langs";

//Oproepen met:
trace(arr["Roenes"]); //output: Hier is Roenesje
trace(arr["Dauntless"]);
trace(arr["Gbolssens"]);
Werkt perfect dacht ik zo :)

Dauntless
%Europe/Berlin %501 %2005, 13:02
Gaat dat??? :O.
Wist ik echt niet :s
var arr:Array = new Array();
arr["Roenes"] = "Hier is Roenesje";
arr["Dauntless"] = "Dauntless is ook van de party";
arr["Gbolssens"] = "gbolssens komt ook gezellig langs";

//Oproepen met:
trace(arr["Roenes"]); //output: Hier is Roenesje
trace(arr["Dauntless"]);
trace(arr["Gbolssens"]);
trace(typeof(arr));
trace(arr instanceof Array);
trace(arr.length);
Is het normaal dat hij dan als length 0 geeft? (Ik heb nog niet met associatieve arrays in php gewerkt 8) )

Roenes
%Europe/Berlin %507 %2005, 13:10
Werkt perfect :) Alleen waarom arr.length 0 terug geeft weet ik niet, kan in de help van flash daar ook geen logische verklaring voor vinden :)

SaphuA
%Europe/Berlin %554 %2005, 14:19
Hahahahah :D
Gekke mensjes, wat Roenes maakt is geen array.
Trace 'arr' maar eens ;)
Het wordt dus toch een object...

Roenes
%Europe/Berlin %580 %2005, 14:56
Hahahahah :D
Gekke mensjes, wat Roenes maakt is geen array.
Trace 'arr' maar eens ;)
Het wordt dus toch een object...Het is zeker wel een array want de laatste trace levert true op :)

var arr:Array = new Array();
arr["Roenes"] = "Hier is Roenesje";
arr["Dauntless"] = "Dauntless is ook van de party";
arr["Gbolssens"] = "gbolssens komt ook gezellig langs";

//Oproepen met:
trace(arr["Roenes"]); //output: Hier is Roenesje
trace(arr["Dauntless"]);
trace(arr["Gbolssens"]);
trace(arr instanceof Array);

SaphuA
%Europe/Berlin %831 %2005, 20:57
Maar het leuke is dat het volgende ook true op levert :)
var arr:Array = new Array();
arr["Roenes"] = "Hier is Roenesje";
arr["Dauntless"] = "Dauntless is ook van de party";
arr["Gbolssens"] = "gbolssens komt ook gezellig langs";
arr["SaphuA"] = "SaphuA smeekt om er ook bij te mogen horen";

//Oproepen met:
trace(arr["Roenes"]); //output: Hier is Roenesje
trace(arr["Dauntless"]);
trace(arr["Gbolssens"]);
trace(arr["SaphuA"]);
trace(arr instanceof Object);

arshad
%Europe/Berlin %836 %2005, 21:04
Maar het leuke is dat het volgende ook true op levert :)
var arr:Array = new Array();
arr["Roenes"] = "Hier is Roenesje";
arr["Dauntless"] = "Dauntless is ook van de party";
arr["Gbolssens"] = "gbolssens komt ook gezellig langs";
arr["SaphuA"] = "SaphuA smeekt om er ook bij te mogen horen";

//Oproepen met:
trace(arr["Roenes"]); //output: Hier is Roenesje
trace(arr["Dauntless"]);
trace(arr["Gbolssens"]);
trace(arr["SaphuA"]);
trace(arr instanceof Object);

Zodra er iets wordt geïnstancieerd geeft instancenaam instanceof Object 'true'. Array is subclass van Object vandaar dat die true geeft.

arshad
%Europe/Berlin %838 %2005, 21:07
Die array.length slaat op eht aantal geïndexeerde waarden van een array. Als je dat arr[0] = "ik ben arshad" en je tracet dan de length dan geeft die 1. Want de 0 hier is een index. In arr["Roenes"] is "Roenes" geen index...

In de F1-help van actionscript staat dan ook
Property; a non-negative integer specifying the number of elements in the array. This property is automatically updated when new elements are added to the array. When you assign a value to an array element (for example, my_array[index] = value), if index is a number, and index+1 is greater than the length property, the length property is updated to index+1.

SaphuA
%Europe/Berlin %838 %2005, 21:07
Ah crap je hebt gelijk :)

var arr:Array = new Array();
arr[0] = "Hier is Roenesje";

//Oproepen met:
trace(arr[0]); //output: Hier is Roenesje
trace(arr instanceof Object);

Traced ook true..

Maar alsnog vind ik het vreemd dat een array als een object behandeld kan worden :(

Tha Narie
%Europe/Berlin %841 %2005, 21:11
Alles kan als een Object behandeld worden, omdat alles een subclass van een Object is.

var f = function(){};
f._name = 'test';

Dit kan ook gewoon.

gbolssens
%Europe/Berlin %849 %2005, 21:23
vet! Kom ik hier effe een dag niet en zijn er zomaar 11 reacties op m'n post. Bedankt voor de reacties hoor iedereen.

Alle soorten objecten zijn idd kindjes van de grote, alles-overkoepelende Object Class.

Ik heb, natuurlijk nadat ik m'n vraag hier postte, eens effe zitten lezen in één van m'n boeken en daarin staat nog het volgende (en Dauntless heeft dat boek ook, dus eigenlijk wist'ie 't wel ;-) ):


What effect does naming an array element instead of using a number have on the Array object?

- Nameds elements are not considered in the length of the Array. Although not recommended you can create a mixed array containing both numeric and named elements. In this case the array length is the number of numerically indexed elements only.

- You cannot access a named element by a number, only by its name

- You cannot use Array class methods to manipulate named array elements. To delete a named element, you use the keyword delete.

- You must use a for-in loop to loop through and access all elements of a named or mixed array.


Dus in php worden associatieve arrays veel beter ondersteund dan in Flash. Heel jammer, want je kunt er onwijs gave dingen mee doen. Op www.php.net zie je in voorbeeldjes van de hele batterij Array methods eigenlijk alleen maar associatieve arrays terug komen.

In datzelfde boek staat een paar paragrafen verder dit:


After you add named properties to the Array object, you can no longer use the properties and methods of the Array class, removing any benefit the object had for being an instance of the Array class.

When you want a collection of name/value pairs associated with one variable and don't need to (or can't) use any of the properties or methods of a built-in class, you can instead create an instance of the general Object class, which allows you to create a complex data type with its own methods and properties.


Dus met die 2 paragraafjes waren eigenlijk mijn vraag, en alle vragen die eruit voortvloeiden, ineens opgelost.

greetz,
GB

P.S. Het doet me allemaal een beetje denken aan de tijd toen ik nog C++ kreeg opschool, en de prof vertelde over de zogenaamde "Struct" (ik weet niet of dit iemand iets zegt). Dat is in C++ (heb het nog in geen enkele andere taal gezien) ook een apart datatype waarin je bepaalde bij elkaar horende informatie kunt STRUCTureren.

P.P.S. het geciteerde boek is:
Titel: "Flash MX Professional 2004 application development"
Auteur: Jeanette Stallons.
Uitgeverij: Macromedia Press
ISBN:0-321-23834-6
Prijs: €47,31 (Fnac)

Een echte top-aanrader voor iedereen die serieus met O.O. Actionscript bezig is.

Dauntless
%Europe/Berlin %852 %2005, 21:27
Mja, dat boek lees ik nooit :D. Als eens iets niet snap over een component kijk ik daar in, maar over het algemeen zit ik er nooit in te lezen. Ik hou ook niet echt van boeken die 1 casestudy (ok, 2) hebben ...

Maar dat is dus offtopic ;)

gbolssens
%Europe/Berlin %856 %2005, 21:33
Ik hou ook niet echt van boeken die 1 casestudy (ok, 2) hebben ...


Probeer het eens als je een dag niks te doen hebt. 't is echt wel "vree wijs".