Thread Array Derefenzieren (6 answers)
Opened by Enana at 2015-06-06 00:00

topeg
 2015-06-06 01:45
#181264 #181264
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Dein erster Fehler:
Code (perl): (dl )
push @data,[@ref];

$ref ist nicht @ref!

zweiter Fehler:
Code (perl): (dl )
@data->[$fields{column1}]

Das sagt: Gib variable data als Array aus, indem auf die Array-referenz data zugegriffen wird und der index $fields{column1} benutzt wird.
Wie du siehst ist das ein völliges durcheinander.
@data ist eine Liste der aus der DB gelesenen "Zeilen" nicht die Spalten. @data ist ein "ArrayOfArrays" (AoA) Du Willst wahrscheinlich bei dem min den minimalen Wert der Spalte mit dem Namen "column1" haben.
Dafür musst du alle Zeilen durch gehen und die passende Spalte Lesen.

Was du wahrscheinlich willst:
Code (perl): (dl )
my $var2 = min map{ ( $_->[$fields{column1}] ) }@data

oder:
Code (perl): (dl )
1
2
3
my @tmp;
push(@tmp,$_->[$fields{column1}]) for(@data);
my $var2 = min @tmp; 



Daraus wird also:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my @data;
my $col=0;
my %fields;

foreach( @{$sth->{NAME_lc}} ){
  $fields{$_} = $col++;
}

while(my $ref=$sth->fetchrow_arrayref){
  push( @data, $ref );
}

my $var1 = $data[0]->[$fields{column1}];
my $var2 = min map{ ( $_->[$fields{column1}] ) }@data;


Der Code ist auch etwas umständlich.
Du könntest es auch so machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
my @data;
my @data;

while( my $ref = $sth->fetchrow_hashref() ){
  push( @data, $ref );
}

my $var1 = $data[0]->{column1};
my $var2 = min map{ $_->{column1} } @data;

View full thread Array Derefenzieren