2012-05-16 43 views
6

Tôi đang tìm kiếm một tương đương Perl để đoạn code sau: -Perl tương đương với Php foreach vòng lặp

foreach($array as $key => $value){ 
... 
} 

Tôi biết tôi có thể làm một vòng lặp foreach như sau: -

foreach my $array_value (@array){ 
.. 
} 

nào sẽ cho phép tôi làm những việc với các giá trị mảng - nhưng tôi cũng muốn sử dụng các phím.

Tôi biết có một hàm băm Perl cho phép bạn thiết lập cặp khóa-giá trị, nhưng tôi chỉ muốn số chỉ mục mà mảng tự động cung cấp cho bạn.

Trả lời

7

Hãy thử:

my @array=(4,5,2,1); 
foreach $key (keys @array) { 
    print $key." -> ".$array[$key]."\n"; 
} 

trình cho Hashes và Mảng. Trong trường hợp Mảng, $ key giữ chỉ mục.

6

Tôi đoán Perl gần nhất là một cái gì đó như thế này:

foreach my $key (0 .. $#array) { 
    my $value = $array[$key]; 

    # Now $key and $value contains the same as they would in the PHP example 
} 

Kể từ Perl 5.12.0, bạn có thể sử dụng chức năng keys trên mảng cũng như băm. Điều đó có thể dễ đọc hơn một chút.

use 5.012; 

foreach my $key (keys @array) { 
    my $value = $array[$key]; 

    # Now $key and $value contains the same as they would in the PHP example 
} 
+0

Cảm ơn tất cả các câu trả lời . Vấn đề của tôi đã được giải quyết! Tôi không thực sự muốn bỏ phiếu cho câu trả lời hay nhất vì họ đều ổn. – fbc

+0

Nếu tôi là bạn, tôi sẽ chấp nhận câu trả lời của flesk. Giải pháp 'each' gần với phiên bản PHP hơn bất kỳ ví dụ nào khác. –

14

Nếu bạn đang sử dụng Perl 5.12.0 trở lên bạn có thể sử dụng each trên mảng:

my @array = 100 .. 103; 

while (my ($key, $value) = each @array) { 
    print "$key\t$value\n"; 
} 

Output:

0  100 
1  101 
2  102 
3  103 

perldoc each

+2

Vâng, lười biếng 'while' là thích hợp hơn với' foreach' háo hức. – Axeman

+0

@Axeman: Đó là một điểm tốt. Ngay cả khi hiệu suất đạt được là không đáng kể trên mảng bốn yếu tố của tôi, nó chắc chắn là một sự khác biệt đáng chú ý. – flesk

Các vấn đề liên quan