2012-05-16 14 views
6

ich suche ein Perl entspricht dem folgenden PHP-Code: -Perl entspricht Php foreach Schleife

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

Ich weiß, ich kann wie so eine foreach-Schleife tun: -

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

Welche werde es mir ermöglichen, Dinge mit den Array-Werten zu tun - aber ich möchte auch die Schlüssel verwenden.

Ich weiß, es gibt einen Perl-Hash, mit dem Sie Schlüssel-Wert-Paare einrichten können, aber ich möchte nur die Indexnummer, die das Array automatisch gibt.

Antwort

7

Versuchen:

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

Works für Hashes und Arrays. Im Falle von Arrays hält die $ Taste den Index.

6

Ich denke, in der Nähe Perl so etwas wie diese:

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

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

Seit Perl 5.12.0, können Sie die keys Funktion auf Arrays sowie Hashes verwenden. Das könnte etwas lesbarer sein.

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

Danke für all diese Antworten . Mein Problem ist gelöst! Ich möchte nicht wirklich über die beste Antwort abstimmen, weil es ihnen gut geht. – fbc

+0

Wenn ich du wäre, würde ich Flesks Antwort akzeptieren. Die "each" -Lösung ist der PHP-Version näher als jedes der anderen Beispiele. –

14

Wenn Sie mit Perl 5.12.0 oder höher Sie each auf Arrays verwenden können:

my @array = 100 .. 103; 

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

Ausgang:

0  100 
1  101 
2  102 
3  103 

perldoc each

+2

Ja, das faule 'while' ist dem eifrigen' foreach' vorzuziehen. – Axeman

+0

@Axeman: Das ist ein guter Punkt. Auch wenn der Leistungsgewinn auf meinem Vier-Elemente-Array vernachlässigbar ist, ist es sicherlich ein bemerkenswerter Unterschied. – flesk