User since
2003-09-04
77
Artikel
BenutzerIn
Hi,
ich durchlaufe in einer foreach Schleife Elemente eines Arrays. Wie kann ich überprüfen, ob es ein weiteres Element gibt, oder ob ich bereits am letzten angekommen bin?
my $filter = "where ";
my $names = $sth->{NAME};
foreach $key (@$names) {
push(@spaltennamen,$key);
$filter .= $key." like '%$filter%' or ";
}
User since
2003-08-04
2536
Artikel
ModeratorIn
if($key == (scalar @$names - 1))
{
# letztes
}
\n\n
<!--EDIT|jan|1065347618-->
User since
2003-09-04
77
Artikel
BenutzerIn
danke jan,
stimmte allerdings nicht ganz. Denn du vergleichst die Anzahl der Elemente mit dem letzten Element. Habe das entsprechend angepasst. Hier der Code, für die Leute dies interessiert:
if($key ne (@$names[scalar @$names - 1])) { $filter .= " or "; }
User since
2003-08-04
2536
Artikel
ModeratorIn
oh, stimmt, sorry. wenn die elemente in deinem array größer werden, wäre es vielleicht besser, den index zu durchlaufen und dann wie oben beschrieben zu prüfen:
for my $index (0..scalar @array -1)
{
if($index == (scalar @array - 1))
{
#letztes
}
}
User since
2003-08-04
2536
Artikel
ModeratorIn
achja, und statt
(@$names[scalar @$names - 1]))
kannst du auch
$$names[-1]
schreiben...
User since
2003-08-04
247
Artikel
BenutzerIn
Warum so umständlich, @$names - 1 wäre einfacher $#$names, oder noch besser: einfach $$names[-1], damit greift man auf das letzte Element im Array zu...
Übrigens: Wenn die Gefahr besteht, daß ein Wert zweimal vorkommt, dann würde ich gleich mit Indizes arbeiten, das ist dann sicherer...
Edit: Hab' nicht gesehen, daß es ne Referenz ist... ändert aber vom Prinzip nix...\n\n
<!--EDIT|DS|1065352241-->
User since
2003-08-04
2536
Artikel
ModeratorIn
$#$names sieht immer so unschön aus, deshalb vermeide ich es meistens. mein ästhetik-wille geht mir da über die performance, ansonsten vollkommen korrekt.
User since
2003-08-04
247
Artikel
BenutzerIn
[quote=jan,05.10.2003, 13:21]$#$names sieht immer so unschön aus, deshalb vermeide ich es meistens. mein ästhetik-wille geht mir da über die performance, ansonsten vollkommen korrekt.[/quote]
Hm, da stimm' ich dir zu... aber ich muß gestehen. daß ich so einen Fall so gut wie noch nie hatte... wobei man's hier ja nur bräuchte, wann man mit Indizes arbeitet, und (0..$#$names) könnte man schon fast wieder dulden, oder? ;)
User since
2003-08-04
2536
Artikel
ModeratorIn
hey, obfuscation hat ja auch was für sich ;)
naja, meist ist das wirklich nur so eine sache, wenn ich es in einem script einmal verwendet habe, nutzte ich es die ganze zeit, bis ich irgendwann wieder umsteige. oder eben dann, wenn ich mal "ganz ordentlich performant" schreiben will o_O ok, kommt so gut wie nie vor ;)
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
my $names = $sth->{NAME};
push @spaltennamen, @$names;
my $filter = 'where ' . join (' or ', map { $dbh->quote ("%$_%") } grep $_, @$names);
\n\n
<!--EDIT|Dubu|1065398725-->