http://www.perlmonks.org?node_id=1010684


in reply to Re: multidimensional array's
in thread multidimensional array's

A little known "feature" of fetchall_arrayref is that it will return an array of hashes if you supply it a hash, and if that hash is empty, it will return all the fields.
my @allrows = @{ $sth->fetchrow_arrayref({}) }; # Expand ref, to simpl +ify access

YMMV, but I always find it easier to look at $row{language} than $row[2]. I'm sure there's a mild performance hit, but as long as it's not incredibly slow I'd opt for clarity.

A Monk aims to give answers to those who have none, and to learn from those who know more.

Replies are listed 'Best First'.
Re^3: multidimensional array's
by NetWallah (Canon) on Dec 28, 2012 at 20:11 UTC
    Ah - learned something today - thank you.

    I avoid "fetchall_*", because I mostly process a row-at-a-time , and use the clearer syntax of fetchrow_hashref.

    The OP's questions were based on managing arrays, and I did not want to bring hashes and confuse that discussion.

    Thanks, space_monk.

                 "By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest."           -Confucius

      @All: Thnx a lot for your helpful answers.

      With some additional reading and fiddling around with the syntax I have figured this out now.

      my @allrows =(); while ($row = $sth->fetchrow_arrayref() ) { push @allrows,[@$row]; }; my $titlesfound = @allrows; # Contains the number of results #Show that it works: $loopcount = 0; foreach (@allrows) { my $title1 = ($allrows[$loopcount][1]); print "$title1\n"; $loopcount++; };

      /emgi

        If you do not need the @allrows array, it is wasteful to store data into it. Try this instead:
        my $loopcount = 0; while (my $row = $sth->fetchrow_arrayref() ) { my $title1 = $row->[1]; print "$title1\n"; $loopcount++; }; my $titlesfound = $loopcount;

                     "By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest."           -Confucius