本质上,我想获取一个数组并创建一个单独的字符串,其中所述数组的元素用换行符分隔。
我有一个名为$zones
的数组。输出$zones
的引用确认它是一个数组。
以下代码:
print_log(Dumper($zones));
print_log('-------');
print_log(Dumper(join("\n",$zones)));
产生以下输出
[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = [
'fake.com25',
'fake.com2',
'fake.com27',
'fake.com43',
'fake.com41',
'fake.com40',
'fake.com39',
'fake.com37',
'fake.com36',
'fake.com35',
'fake.com31',
'fake.com56',
'fake.com55',
'fake.com54',
'fake.com53',
'fake.com52',
'fake.com51',
'fake.com50',
'fake.com49',
'fake.com48',
'fake.com42',
'fake.com38',
'fake.com34',
'fake.com33',
'fake.com32',
'fake.com30',
'fake.com29',
'fake.com28',
'fake.com26',
'fake.com24',
'fake.com23',
'fake.com69',
'fake.com68',
'fake.com67',
'fake.com66',
'0',
'fake.com44',
'fake.com45',
'fake.com46',
'fake.com278'
];
[2013-06-15 16:23:29 -0500] info [dnsadmin] -------
[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = 'ARRAY(0x170cf0d8)';
我真的不想手动循环遍历此数组。有人可以解释为什么join()
函数返回类型的名称和十六进制数字吗?
答案 0 :(得分:10)
很简单:
$zones
不是数组。这是一个数组引用。
join
适用于列表。所以如果你这样做:
join("\n",$zones)
您基本上是在单个元素列表上调用join
。元素是一个引用,恰好串联到ARRAY(0x170cf0d8)
。
为了使其正常工作,您必须取消引用它,并通过使用实数数据类型前缀(@
或%
,或在某些情况下$
)来完成。
这可以这样写:@$zones
,或者(包括我在内的一些,说它更具可读性):@{ $zones }
。
当你使用嵌套结构时,这很重要,因为虽然你可以将普通数组作为变量,但是当你处理嵌套数据结构时,它总是引用。
答案 1 :(得分:6)
你想要的是join("\n",@{$zones}))
答案 2 :(得分:5)
$zones
是数组引用,要加入数组值,首先必须通过在标量$zones
前加@
print_log(Dumper(join("\n",@$zones)));
有关更多信息,请参阅以下简短教程: http://perldoc.perl.org/perlreftut.html#NAME