Thread array in hash erweitern (23 answers)
Opened by jan99 at 2010-09-03 12:59

renee
 2010-09-07 10:29
#141237 #141237
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast in Deinem Post folgendes geschrieben:

Code (perl): (dl )
1
2
3
4
5
6
7
        # jetzt sollen die array-daten des hash-keys ausgegeben werden
        # nach dem script kann man auf diese daten mit @{ $VARIABLE{$KEY} } zugegriffen werden
        # das @ ist für mich das kennzeichen das die daten als array zurückkommen und deshalb
        # würde ich for my @data (($key_id_list{$key}) schreiben
        # dieses führt jedoch zu einer fehlermeldung
        # die Dumper-ausgabe zeigt bei $data die erwarteten daten an
}


Wie schreibst Du denn normalerweise eine for-Schleife? (Machst Du ja anfangs auch richtig):

Code (perl): (dl )
1
2
for my $SKALAR ( @ARRAY ) {
}


Und in dem Kommentar schreibst Du, dass Du folgendes versucht hast:
Code (perl): (dl )
1
2
for my @ARRAY ( $SKALAR ) {
}


Der Wert eines Hashes ist *immer* ein Skalar. Den Wert des Hashes holst Du Dir in Deinem Beispiel mit $key_id_list{$key}.

In Deinem Beispiel ist der Skalar eine Arrayreferenz.

Jetzt verbinden wir das Wissen:

1. Wir wissen, dass wir ein Array für die for-Schleife brauchen
2. Wir wissen, dass wir aus dem Hash eine Arrayreferenz bekommen
3. Wir wissen, wie wir aus einer Arrayreferenz ein Array bekommen

Also machen wir im ersten Schritt
Code (perl): (dl )
1
2
for my $SKALAR ( @{ $ARRAYREF } ) {
}


Das $ARRAYREF ersetzen wir noch mit dem Holen der Daten aus dem Hash:

Code (perl): (dl )
1
2
for my $SKALAR ( @{ $key_id_list{$key} } ) {
}


Jetzt wollen wir nur noch die Laufvariable $data verwenden. Also

Code (perl): (dl )
1
2
for my $data ( @{ $key_id_list{$key} } ) {
}


Also Dein Code:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
for my $key (sort keys %key_id_list)
{
        # hier wird der hash-key ausgegeben - das ergebnis ist auch das erwartete
        print "key: ".$key."\n";

        # jetzt sollen die array-daten des hash-keys ausgegeben werden
        for my $data ( @{ $key_id_list{$key} } )
        {
          print Dumper($data);
        }
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread array in hash erweitern