9 Replies Latest reply: Mar 14, 2012 12:18 PM by kglad RSS

    Stupid question about arrays

    Adrien. Community Member

      So I was messing in PHP the last few weeks and I like how they do their arrays, essentially mapping a value to value:

       

       

          public function setParams(array $params)
          {
              foreach ($params as $key=>$value) {
                  $this->setParam($key, $value);
              }
              return $this;
          }
      
      

       

      My question is, if I wanted to do this in AS3.0 I would do something like:

       

      public function setParams(params:Array){

           foreach (params as //something)

           {

                setParams(key:String, value:String);

           }

      }

       

      Can some one fill in the //something spot for me, thats where Im stuck >_>

       

      thanks.

        • 1. Re: Stupid question about arrays
          kglad MVP

          use an associative array (ie, object):

           

          public function(keyA:Array,valueA:Array):Object{

          // error check to ensure keyA.length==valueA.length

          var obj:Object={};

          for(var i:int=0;i<keyA.length;i++){

          obj[keyA[i]]=valueA[i];

          }

          return obj;

          }

          • 2. Re: Stupid question about arrays
            Adrien. Community Member

            Not sure if thats what I want.....I mean it looks like im storing key and value in an object when I need to be setting key and value to a already defined set method as showen in my op.

             

            your essentially passing in two arrays, checking the length and storing them in an object...if im correct. where as the array i would pass in would have:

             

            array[key, value, key, value...]

             

            and for every key I need its coresponding value to set it into my method that takes both a key and a value....

             

             

            Maybe I am missing something?

             

            I sort of get it now as I looked up:

             

            http://livedocs.adobe.com/flex/3/html/help.html?content=10_Lists_of_data_4.html

            • 3. Re: Stupid question about arrays
              kglad MVP

              if you want to pass an array of key,value,key,value, then do so.  there's no significant difference from what i showed:

               

              public function(keyvalueA:Array):Object{

              var obj:Object={};

              for(var i:int=0;i<keyvalueA.length;i+=2){

              obj[keyvalueA[i]]=keyvalueA[i+1];

              }

              return obj;

              }

              • 4. Re: Stupid question about arrays
                Adrien. Community Member

                these are really helpful answers. How ever my next question would be this. what if value in: key, value, key, value.... is an array?

                 

                so:

                 

                you code would look something like:

                 

                public function(keyvalueA:Array):Object{

                     var obj:Object={};

                    for(var i:int=0;i<keyvalueA.length;i+=2){

                             obj[keyvalueA[i]]=keyvalueA[i+1];

                 

                            if(obj[keyvalueA[i+1] is Array){

                                      for (var i:int = 0; keyvalueA[i+1].length; i++) //note the keyvalueA[i+1].length obv doesnt work...

                                     {

                                              //do stuff here

                                     }

                    }

                    return obj;

                }

                 

                 

                Based on this am I any where near the right path or?....

                 

                 

                Thanks for you help

                • 5. Re: Stupid question about arrays
                  kglad MVP

                  i showed the code in message 3 that should be used if you had an array of key,value,key,value.  it doesn't matter what value is.  value could be an array, display object reference, another object etc.  that code i showed is still valid.

                   

                  the only difference in those scenarios is what you do with obj.keyvalue1 (which will be an array, display object reference, another object etc), resp.  if obj.keyvalue1 is an array, you access its elements using array notation:

                   

                  obj.keyvalue1[0], for example.  of course, obj.keyvalue1[0] could be another array, display object reference, another object etc.

                  • 6. Re: Stupid question about arrays
                    Adrien. Community Member

                    but what I am asking is that if, in the case of my example: key, value, key , value - if value was an array, to walk through that array is my above code close to correct based off your example and my understanding of asssociative arrays?

                     

                    I know the type checking is correct but how would I walk through that array if it was an array?

                     

                    if that makes sense.

                     

                    So as you said it doesnt matter if value is an array. but for the sake of the example in message 4 lets assume it is. based off your code and my addition to the example (asssuming your code even worked, havent tried it) is that correct?

                     

                    I would check the type of value if it is an array and then I would walk through it.

                     

                    The question I am asking aside from "is this correct?" is "how do I walk through value - assuming it was an array"

                     

                    thanks for your help

                    • 7. Re: Stupid question about arrays
                      kglad MVP

                      if the values are arrays, you would use the following to trace all the array elements of all the value arrays:

                       

                       

                      public function(keyvalueA:Array):Object{

                      var obj:Object={};

                      for(var i:int=0;i<keyvalueA.length;i+=2){

                      obj[keyvalueA[i]]=keyvalueA[i+1];

                      if(keyvalueA[i+1] is Array){

                      for(var j:int=0;j<keyvalueA[i+1].length;j++){

                      trace("value:",i,"element:",j,keyvalueA[i+1][j]);

                      }

                      }

                      }

                      return obj;

                      }

                      • 8. Re: Stupid question about arrays
                        Adrien. Community Member

                        why thank you. that cleared up my confusion

                        • 9. Re: Stupid question about arrays
                          kglad MVP

                          you're welcome.