[JS]Name als array uitlezen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jacco Engel

Jacco Engel

03/06/2009 11:02:00
Quote Anchor link
Beste mensen ,

ik heb een dynamische lijst met inputs. De naam van deze inputs is als volgt :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
project[1][1]


Hiervan is de eerste key dynamisch.

Nu wil ik in JS dit als 2 dimentionale array uitlezen.

Daarvoor heb ik tot nu toe de volgende code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function createArrayFromName(elName , inpTyp , src)
{
    if(!src)
    {
        src = document ;
    }
    var allElements = src.getElementsByTagName(inpTyp) ;
        var myReturn = new Array() ;
    for(var el in allElements)
    {
        var myEl = allElements[el] ;
        if(myEl.name.match('^'+elName+'.+'))
        {
            var myData = myEl.name.split('[');
            myData[1] = myData[1].replace(']','');
            myData[2] = myData[2].replace(']','');
            myReturn[myData[1]][myData[2]] = myEl.value
        }
    }
    return myReturn ;
}

console.log(createArrayFromName('project' , 'input' , $('hours_list')))


Nu krijg ik alleen de volgende error:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
TypeError: myReturn[myData[1]] is undefined


Iemand enig idee hoe ik dit kan oplossen?
 
PHP hulp

PHP hulp

19/04/2024 10:34:02
 
Jesper Diovo

Jesper Diovo

03/06/2009 14:25:00
Quote Anchor link
Edit: Oh, ik zit verkeerd te kijken. Wat een vreemde error... Kijk alsnog eens wat myData[1] bevat?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Jacco Engel

Jacco Engel

03/06/2009 14:34:00
Quote Anchor link
al opgelost

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    this.createArrayFromName = function(elName , inpTyp , src)
    {
        if(!src)
        {
            src = document ;
        }
        var allElements = src.getElementsByTagName(inpTyp) ;
        var myReturn = new Array() ;
        for(var el in allElements)
        {
            var myEl = allElements[el] ;
            if(myEl.name && myEl.name.match('^'+elName+'.+'))
            {
                var myData = myEl.name.split('[');
                myData[1] = myData[1].replace(']','');
                myData[2] = myData[2].replace(']','');
                
                if(!myReturn[myData[1]])
                {
                    myReturn[myData[1]] = new Array()
                }
                myReturn[myData[1]][myData[2]] = myEl.value
            }
        }
        return myReturn ;
    }


En voor de mensen die het willen gaan gebruiken, op het moment werkt het alleen met 2 dimentionale arrays. Named keys heb ik niet getest maar zou haast wel moeten werken
 
Jacco Engel

Jacco Engel

05/06/2009 13:54:00
Quote Anchor link
Mensen, ik bump hem eens even, deze functie moet nu namelijk recursief gaan worden en dus gaan werken met array's van in theorie oneindige dieptes

Heb alleen geen idee hoe ik dat moet gaan aanpakken.

Kan iemand me een zetje in de goede richting geven?
 
Robert Deiman

Robert Deiman

05/06/2009 14:07:00
Quote Anchor link
Kan je niet met een if(is_array()) of in elk geval zoiets kijken dat je dan de functie opnieuw aanroept vanuit de functie?

Je krijgt dan zo'n constructie (php voorbeeld, maar moet voor js ook werken):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function functie($array){
   foreach($array as $key => $value){
      if(is_array($value)){
        $return[] = functie($value);
        }

      else{
        $return[] = $value;
        }
   }
}

?>

Wanneer de name nog een array is, dan roep je met die array de functie opnieuw aan. Dat gaat allemaal automatisch en dat is ook hetgeen wat we recursief noemen.
 
Jacco Engel

Jacco Engel

05/06/2009 14:16:00
Quote Anchor link
Probleem is, het is nog geen array, dat moet het nog gaan worden.

Ik heb dit aan data :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
array("project", "2", "1");
array("project", "2", "2");
array("project", "2", "3");
array("project", "2", "4");
array("project", "2", "5");
array("project", "2", "6");
array("project", "2", "7");
array("project", "1", "1");
array("project", "1", "2");
array("project", "1", "3"]);
array("project", "1", "4");
array("project", "1", "5");
array("project", "1", "6");
array("project", "1", "7");


En dat moet :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
array (
    1 => array(
        1 => 'waarde',
        2 => 'waarde',
        3 => 'waarde',
        4 => 'waarde',
        5 => 'waarde',
        6 => 'waarde',
        7 => 'waarde'
    ),
    2 => array(
        1 => 'waarde',
        2 => 'waarde',
        3 => 'waarde',
        4 => 'waarde',
        5 => 'waarde',
        6 => 'waarde',
        7 => 'waarde'
    )
)
 
Jacco Engel

Jacco Engel

08/06/2009 11:00:00
Quote Anchor link
bump
 
Hipska BE

Hipska BE

08/06/2009 11:27:00
Quote Anchor link
en als je nou eens zou doen op deze manier?

project[1][]
project[1][]
project[1][]
project[2][]
project[2][]

Dan kan je met getelementsbyname met "project[1][]" allen ophalen en dan nog eens met "project[2][]" de andere...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.