我在Perl中有以下数组,它们在数据库中作为多行获取.
$arrayref = [
[ 1, "name1", "name2" ],
[ 2, "name3", undef ],
[ 3, "name5", "name6" ],
[ 4, "name10", undef ],
];
Run Code Online (Sandbox Code Playgroud)
我想把它变成像这样的哈希数组
my @array = (
{ id => 1, name => "name1", l_name => "name2" },
{ id => 2, name => "name3", l_name => undef },
{ id => 3, name => "name5", l_name => "name6" },
{ id => 4, name => "name10", l_name => undef },
);
Run Code Online (Sandbox Code Playgroud)
您可以使用map {}将数组引用转换为哈希引用,
my @cols = qw(id name l_name);
my @array = map { my %h; @h{@cols} = @$_; \%h } @$arrayref;
Run Code Online (Sandbox Code Playgroud)
要么
use List::MoreUtils qw( zip );
my @cols = qw(id name l_name);
my @array = zip(\@cols, @$arrayref);
Run Code Online (Sandbox Code Playgroud)
我在Perl中有以下数组,它们在数据库中作为多行获取
你可能是在打电话
$sth->fetchall_arrayref();
Run Code Online (Sandbox Code Playgroud)
相反,如果您使用空的匿名哈希作为第一个参数
$sth->fetchall_arrayref( {} );
Run Code Online (Sandbox Code Playgroud)
然后DBI将以您想要的格式返回数据作为哈希数组
如果
$slice是哈希引用,则将fetchall_arrayref每行提取为哈希引用.如果$slice散列为空,则散列中的键具有默认返回的任何名称.(请参阅FetchHashKeyName属性.)如果$slice散列不为空,则将其用作切片以按名称选择单个列.哈希的值应设置为1.返回的哈希的键名与参数哈希中名称的字母大小写相匹配,而不管FetchHashKeyName属性如何.例如,要将每行的所有字段作为哈希ref获取:
Run Code Online (Sandbox Code Playgroud)$tbl_ary_ref = $sth->fetchall_arrayref({});