Working on converting an array to another array. In PHP, this is easy, but Perl has some syntax that I am having a hard time getting my head around and understanding.
Here is my loop in Perl:
foreach my $r (@toindex){
#print Dumper $r;
%indexed{@$r[0]}{'image_id'} = @$r[0]; #Broken
%indexed{"@$r[0]"}{'image_id'} = @$r[0]; #Broken
}
Here is my @toindex array
$VAR1 = [
[
3638584,
'Aperture',
'F13'
],
[
3638588,
'Exposure Bias',
'0 EV'
],
[
3638588,
'Focal Length',
'80.0 mm'
],
];
And here is what I want to do, but in PHP
foreach($indexrows as $k => $v){
$indexed[$v['image_id']]['image_id'] = $v['image_id'];
}
It seems so very simple in PHP, but moving it to Perl is proving to be quite a challenge for me.
Update
Thanks to the help of Sinan Ünür and DVK with that final little pointer, I have a working solution. I'm posting the complete script in case anyone might find some part of it useful in the future.
#!/usr/bin/perl
use strict; use warnings; use DBI; use Data::Dumper;
my $dbh = DBI->connect('dbi:Pg:dbname=database;host=serveraddress','user','password') or die;
my $sth;
my $sql = "SELECT id, field, data FROM table";
my $offset = 0;
my $increment = 20;
my $toindex;
# This loop here is to solve a problem that was not part of the
# original question. I included it to illustrate the syntax for
# looping a database query
do{
$sth = $dbh->prepare($sql . " LIMIT " . $increment . " OFFSET " . $offset);
$sth->execute or die;
$toindex = $sth->fetchall_arrayref;
$offset = $offset + $increment;
}while(@$toindex == 0);
# Alternately, if you do not need a loop below is all you need
# $sth = $dbh->prepare($sql);
# $sth->execute or die;
# $toindex = $sth->fetchall_arrayref;
my %indexed;
foreach my $r ( @$toindex ) {
#print Dumper $r;
my ($id, $field, $value) = @$r;
@{ $indexed{ $id } }{('image_id', $field)} = ($id, $value);
}
print Dumper %indexed;
$dbh->disconnect;