Thread aus Liste den Text von IDs zum string (6 answers)
Opened by Gustl at 2019-12-21 13:03

haj
 2019-12-21 14:46
#191006 #191006
User since
2015-01-07
555 Artikel
BenutzerIn

user image
Das kommt drauf an... Wenn viele Zugriffe auf die @chooseList erfolgen, dann lohnt es sich, die erst einmal in eine passendere Struktur umzuformulieren. Ansonsten gibt es eine Stelle, die sich direkt kürzer schreiben läßt:
Code (perl): (dl )
1
2
3
4
  my @arrayJoin;
  foreach(@listvalues){
    push( @arrayJoin, $_->{text} );
  } 

Genau für diesen Fall - aus einer Liste wird eine andere gebaut - gibt es die Funktion Perldoc:perlfunc map:
Code (perl): (dl )
my @arrayJoin = map { $_->{text} } @listvalues;


Die Umformulierung ist auch gar nicht so lang: Da erzeuge ich in einer Schleife über die Liste ein "Hash of Lists", die direkt auf die geänderte Funktion getStringChoose2 zugeschnitten ist:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my %chooseHash = ();
foreach my $satz (@chooseList) {
    $chooseHash{$satz->{list}}[$satz->{value}] = $satz->{text};
}

sub getStringChoose2 {
    my ($hash,$ids,$list) = @_;

    my $string = join ", ", @{$chooseHash{$list}}[@$ids];
    return $string || " - ";
}

say getStringChoose2 ( \%chooseHash, [3,10], 'optionsMemberRolle');

Man muss sich aber im klaren sein, dass dabei Duplikate (die vielleicht sowieso gar nicht vorkommen dürfen) verschwinden: Wenn ich Deine Datenbank um folgenden Eintrag erweitere:
Code: (dl )
1
2
3
4
5
6
...
{
"value"=>3,
"text"=>"Bierbrauer",
"list"=>"optionsMemberRolle"
},
...dann erfasst Dein Code beides und gibt Kassier, Bierbrauer, Volleyballspieler aus, während bei meinem nur Bierbrauer, Volleyballspieler rauskommt.

View full thread aus Liste den Text von IDs zum string