Thread Unbestimmt tiefen HashinHash erzeugen (14 answers)
Opened by scriptor at 2009-08-09 00:58

scriptor
 2009-08-09 13:24
#124001 #124001
User since
2008-05-07
69 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hier nochmal das Beispiel nach den Hinweisen von pq und LanX korrigiert. Wenn die letzte Komponente erreicht ist, wird nun der Wert gesetzt. Funktioniert soweit.
Nicht funktioniert dagegen das Einbauen der Arrays ab Zeile 13. In der Regel wird der $iref auf einen Hash referenzieren, wie kann ich dann eine Liste zuweisen???
Code (perl): (dl )
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
27
28
29
30
31
32
33
34
35
36
37
38
39
sub QueryToHash
    {
    my $query       = shift ;           # der string mit der Query
    my %resulthash;
    my @parameter_arr = split /\&/, $query ;
    foreach my $parameter (@parameter_arr)
        {
        my $iref = \%resulthash;
        my ( $p_name, $p_value ) = split /=/, $parameter ;
        my @komponenten = split /_/, $p_name ;  # zerlege name in komponenten
        while( my $komponente = shift  @komponenten )
            {
          if( $komponente =~ /(\d{1,6})/  )   # komponente ist dezimal
               { # ???????????????????????????
                $komponente = scalar $komponente;
#               $iref->[ $komponente ] = [] unless $iref->[ $komponente ];
#                $iref = $iref->[ $komponente ]; 
               }
           else 
               {
                unless( $iref->{$komponente} )
                    {
                    unless( scalar @komponenten )
                        {
                        $iref->{$komponente} = $p_value ;
                        #next;
                        }
                    else
                        {
                        $iref->{$komponente} = {} ;
                        }
                    }
                $iref = $iref->{$komponente};
                }
            }
        }
    return \%resulthash;
    }
print Dumper( QueryToHash('nur_ein_test_mit_zahl_123=456&nur_ein_test_ohne_zahl=789') );
Und dazu die Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
$iref = {
'nur' => {
'ein' => {
'test' => {
'ohne' => {
'zahl' => '789'
},
'mit' => {
'zahl' => {
'123' => '456'
}}}}}};

Gewünscht wäre:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
$iref = {
'nur' => {
'ein' => {
'test' => {
'ohne' => {
'zahl' => '789'
},
'mit' => {
'zahl' => [123] = '456'
}}}}}};

Last edited: 2009-08-09 14:01:34 +0200 (CEST)

View full thread Unbestimmt tiefen HashinHash erzeugen