Leser: 40
1
2
3
4
<input name="bla[0]" />
<input name="bla[1]" />
<input name="foo['bar']" />
<input name="foo['baz']" />
1 2 3 4 5 6
my $cgi = CGI->new(); my @bla, %foo; $bla[0] = $cgi->param("bla[0]"); $bla[1] = $cgi->param("bla[1]"); $foo{'bar'} = $cgi->param("foo['bar']"); $foo{'baz'} = $cgi->param("foo['baz']");
@foo = split("\0",$params->{'foo'});
1 2 3
my $cgi = new CGI; my @bla = map { $cgi->param("bla[$_]") } 0..1; my %foo = map { $_ => $cgi->param("foo['$_']") } qw/bar baz/;
2010-01-25T10:59:14 murphyAn und für sich finde ich es ausgesprochen gut, dass das CGI-Modul hier nicht wie PHP Magie anwendet, sondern einfach die Datenstruktur wiederspiegelt, die tatsächlich übertragen wurde.
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/php5
<?php
$array = array(1, 2);
$array[4] = 4;
$array[3] = 3;
$array[100] = 100;
foreach ( $array as $val ) {
echo $val, "\n";
}
?>
2010-01-26T13:24:43 sid burnDas Beispiel sollte eigentlich alles aussagen:
2010-01-26T14:34:15 LanX-Was die Internas von PHP anbelangt könnte es sich lohnen Barney anzumailen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
> var a = [1,2]
undefined
> a[4] = 3;
3
> a[3] = 3;
3
> var a = [1,2]
undefined
> a[4] = 4;
4
> a[3] = 3;
3
> a
[1, 2, undefined, 3, 4]
> a.map(function(k){ console.info("k: " + k) })
k: 1
k: 2
k: 3
k: 4
QuoteDafür gibt's dann doch wieder Funktionen, mit denen man die Arrays sortiert.
Quote77 Funktionen und eine besser als die andere, da weiß man bald gar nicht mehr, was man nehmen soll.
QuoteWenn es im Hintergrund wirklich Hashes sind, entstünde doch durch die reproduzierbare Sortierung Overhead, oder nicht?
2010-01-25T12:41:26 cyclohexanOK, wobei ich dann schon vorher wissen muss, welche Elemente das Array bzw. der Hash hat.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use strict; use warnings; use CGI; my $cgi = new CGI; $cgi->param( 'bla[0]', 'bla[0]' ); $cgi->param( 'bla[1]', 'bla[1]' ); $cgi->param( 'foo[\'bar\']', 'foo[\'bar\']' ); $cgi->param( 'foo[\'baz\']', 'foo[\'baz\']' ); # zum testen $cgi->param( 'bla[\'bar\']', 'bla[\'bar\']' ); $cgi->param( 'foo[0]', 'foo[0]' ); my %form; for my $param ( $cgi->param ) { my( $name, $index ); if ( ( $name, $index ) = $param =~ /(\w+)\[(\d+)\]/ ) { if ( defined $form{$name} and ref $form{$name} ne 'ARRAY' ) { warn "$param tries to overwrite a non-array"; } else { $form{$name}->[$index] = $cgi->param( $param ); } } elsif ( ( $name, $index ) = $param =~ /(\w+)\[\'(\w+)\'\]/ ) { if ( defined $form{$name} and ref $form{$name} ne 'HASH' ) { warn "$param tries to overwrite a non-hash"; } else { $form{$name}->{$index} = $cgi->param( $param ); } } else { $form{$param} = $cgi->param( $param ); } } use Data::Dumper; print Dumper \%form;
2010-01-25T12:41:26 cyclohexanOK, wobei ich dann schon vorher wissen muss, welche Elemente das Array bzw. der Hash hat.
my $erstes_bla = $cgi -> param($bla[0]);
2010-01-25T11:02:33 GwenDragon2. Du musst auch den ausgelesenen Parameter einer Variablen zuweisen, sonst hast du nur einen void-Kontext ohne Sinn.
2010-01-25T11:24:10 GwenDragonSchau mal die Linien links neben den Antworten an, da kannst du sehen, dass cyclohexans und meine Antwort unterhalb deiner Antwort sind.
@values = $cgi->param('foo'); # qw(1 2 3 4 5)