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