Schrift
[thread]6562[/thread]

Inhalt eines Arrays überprüfen: Wie macht man dass???



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Tom
 2004-09-02 21:13
#49863 #49863
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ich habe z.B. ein Array mit folgendem Inhalt

Code: (dl )
@test = (1, 2, 3, 4,);


Jetzt möchte ich mit einer if-Abfrage überprüfen ob die Zahl 3 vorkommt.

Wie mache ich das???

Habe es so versucht, aber da wird immer nur das letzte Element geprüft.

Code: (dl )
1
2
3
4
5
if (@test == "3"){
$ausgabe = "Ja";
}else{
$ausgabe = "Nein";
}


Danke

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
[HR]Doomrunner
 2004-09-02 21:21
#49864 #49864
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Also ich würde das wie folgt machen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
@test = (1, 2, 3, 4,);

$ausgabe = 'nein'
foreach $test (@test) {
    if($test == 3) { $ausgabe = 'ja'; }
}

print $ausgabe;


Ganz einfache Sache...
betterworld
 2004-09-02 21:32
#49865 #49865
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Code: (dl )
if (grep {3==$_} @array)
pq
 2004-09-02 21:44
#49866 #49866
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
würde auch grep für kleine arrays vorschlagen, ansonsten:
Code: (dl )
1
2
my $ausgabe = "nein";
$_ eq "3" and $ausgabe = "ja", last for @array;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Tom
 2004-09-03 16:09
#49867 #49867
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke das klappt soweit, nur in einem Fall klappt es nicht, hier wird immer nur der erste Eintrag im Array verarbeitet aber warum???

Code: (dl )
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
# Hier wird der Kalender zusammengebaut
for($row = 1; $row <= 6; $row ++){
$table .= "<tr>\n";
for(0..6){
$y_day = $x_day;
&day;
# Der aktuelle Tag wird farbig angezeigt
if ($datum eq "$y_day.$month.$year"){
$daycolor = "klink";
}else{
$daycolor = "link";
}
if (grep {$x_day==$_} @test){
$classkal = "kalender_bg";
}else{
$classkal = "kalender";
}
# ENDE Der aktuelle Tag wird farbig angezeigt
if( $first_day <= $_ and $row == 1){ # Einstieg in Kalender
$table .= "<td class=$classkal><span class=fontkal><a href=\"$cgi_path/event.cgi?rdate=$y_day.$month.$year\" class=$daycolor style=\"text-decoration:none\"><b>$x_day</b></a></span></td>\n";
$x_day++;
}
elsif( $x_day <= $days and $row != 1){
$table .= "<td class=$classkal><span class=fontkal><a href=\"$cgi_path/event.cgi?rdate=$y_day.$month.$year\" class=$daycolor style=\"text-decoration:none\"><b>$x_day</b></a></span></td>\n";
$x_day++;
}
else{ # Tag stimmt nicht überein
$table .= "<td class=\"kalender\">&nbsp;</td>\n";
}
}
$table .= "</tr>\n";
}


Tom\n\n

<!--EDIT|Tom|1094213440-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Crian
 2004-09-03 17:19
#49868 #49868
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Da kommt doch gar kein Array drin vor, oder hab ichs übersehen?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
DS
 2004-09-03 17:27
#49869 #49869
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
[quote=Tom,02.09.2004, 19:13]Habe es so versucht, aber da wird immer nur das letzte Element geprüft.[/quote]
Das stimmt so nicht... bei deinem Beispiel oben wird die Länge des Arrays getestet, die bei einem Array (1,2,3,4,...) zufällig dem Wert des letzten Elements entspricht...

Du schreibst, dass es in einem Fall nicht geht, in welchem?

Und noch was: Was spricht gegen for(each) my $row (1..6) ...?
Tom
 2004-09-03 19:37
#49870 #49870
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Quote
[quote=Tom,02.09.2004, 19:13]Habe es so versucht, aber da wird immer nur das letzte Element geprüft.

Das stimmt so nicht... bei deinem Beispiel oben wird die Länge des Arrays getestet, die bei einem Array (1,2,3,4,...) zufällig dem Wert des letzten Elements entspricht...
[/quote]

Das hat sich ja schon dank betterworld erledigt.

Also ich habe es mit einer Test-Datei nach dem Muster von betterworld
getestet, was auch funktioniert. Dann wollte ich das ganze in mein Kalender-Modul einbauen aber da funktioniert das ganze nicht so wie es soll, es wird immer nur das erste Element aus dem Array verarbeitet.

Was ich eigentlich vorhabe ist folgendes, es werden in eine Datenbank Einträge zu bestimmten Tagen gemacht, diese Tage lese ich aus und speicher den Tag in einem Array, dann will ich wenn das Kalender-Modul aufgerufen wird alle Tage von denen Einträge in der Datenbank stehen farbig hervorgehoben werden, das wollte ich damit lösen.

Code: (dl )
1
2
3
4
5
if (grep {$x_day==$_} @test){
$classkal = "kalender_bg";
}else{
$classkal = "kalender";
}


Quote
Und noch was: Was spricht gegen for(each) my $row (1..6) ...?


Ich möchte an dem Kalender-Modul nichts verändern was schon funktioniert.

Danke

Tom\n\n

<!--EDIT|Tom|1094225967-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
betterworld
 2004-09-03 20:47
#49871 #49871
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Was steht denn eigentlich in @test drin?
Tom
 2004-09-05 15:42
#49872 #49872
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=betterworld,03.09.2004, 18:47]Was steht denn eigentlich in @test drin?[/quote]
In @test stehen die Tage drin von denen es einen Eintrag in der Datenbank gibt, ich lese die Tage vorher aus und schreibe sie da rein.

Quote
$dbh = DBI->connect( "$dbms:$dbname","$dbuser","$dbpasswd", {PrintError => 0, RaiseError => 1}) || die
"Verbindung zur Datenbank fehlgeschlagen: $DBI::errstr";

my $sql = qq{SELECT * FROM ${table_prefix}topic WHERE time between $time and $etime ORDER BY time};
my $sth = $dbh->prepare( $sql );
$sth->execute();

my @test = ();

while($ref = $sth->fetchrow_hashref()) {

my ($tsec,$tmin,$thour,$tmday,$tmon,$tyear,$twday,$tyday,$tisdst) = localtime($ref->{'time'});
$tyear = $tyear + 1900;
$tmon = $tmon + 1;

$anzahl = @test;

$test[$anzahl + 1] = "$tmday ";
};
$sth->finish();
$dbh->disconnect();


Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-09-02 21:13.