2017-07-21 60 views
0

我有從SQL對象返回的數組值。使用連接來連接數組值

my @keys = $db_obj->SelectAllArrayRef($sql); 
print Dumper @keys; 

$VAR1 = [ [ '8853' ], [ '15141' ] ]; 

我需要創建此數組字符串:8853, 15141

my $inVal = join(',', map { $_->[0] }, @$keys); 

my $inVal; 
foreach my $result (@$keys){ 
    $inVal .= $result->[0]; 
} 

my $inVal = join(',', @$keys); 

我得到的價值是ARRAY(0x5265498),ARRAY(0x52654e0)。我認爲它對數組的引用。任何想法我在這裏想念什麼?

+0

'$ keys'與你的'$ VAR1'例子有什麼關係? – xxfelixxx

+0

my @keys = $ db_obj-> SelectAllArrayRef($ sql); print Dumper @keys; Dumper的結果是$ VAR1 = [[''8853'],['15141']]; – Kris1511

+0

你可以捕獲一個數組引用爲'my($ aref)= $ db_obj - > ....'在perl中,'$ keys'和'@ keys'是不同的變量(!)。 '$ keys'是一個標量變量,持有一個值或者對其他東西的引用。 '@ keys'是一個數組。有關血淋淋的細節,請參閱perldoc perlref。 – xxfelixxx

回答

2

不通過數組Dumper;它會導致混淆輸出。 $VAR1不是@keys的轉儲,它是$keys[0]的轉儲。相反,你應該做的

print(Dumper(\@keys)); 

這將給予

$VAR1 = [ [ [ '8853' ], [ '15141' ] ] ]; 

你想要的代碼是

join ',', map { $_->[0] }, @{ $keys[0] }; 

這就是說,它看起來->SelectAllArrayRef返回到基準結果,所以它應該被稱爲如下:

my $keys = $db_obj->SelectAllArrayRef($sql); 

爲此,

print(Dumper($keys)); 

輸出

$VAR1 = [ [ '8853' ], [ '15141' ] ]; 

而且你可以使用任何你在你的問題中使用的方法。

join ',', map { $_->[0] }, @$keys; 
2

第一個版本應該爲你工作:

my $arr = [ [ '8853' ], [ '15141' ] ]; 
my $values = join(',', map { $_->[0] } @$arr); 
print $values . "\n"; 

8853,15141 
+0

似乎沒有工作...... :(在上下文中......似乎以腳本思考的方式工作 – Kris1511

+1

@ Kris1511然後向我們展示該背景請編輯問題並顯示設置它的代碼否則,你的前兩次嘗試是好的(最後一次會給你顯示的,兩個參考串) – zdim