Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2 (https://www.tweakpc.de/forum/programmiersprachen/65329-schauen-ob-elemente-array1-uebereinstimmen-elementen.html)

Greeven 28.11.2008 02:29

Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2
 
Guten Tag,
ich habe zwei Arrays und schaue bezüglich des ersten Arrays mit jedem seiner Elemente, ob es mit einem von den zweiten Array übereinstimmt. Nun ist es leider so, dass dies manchmal funktioniert und manchmal nicht. Ich habe mir es sogar schon ausgeben lassen und mir wird rotzfrech gesagt, dass zwei gleiche Werte nicht gleich sind! Wenn ich im ersten else-Bereich reinsetze

echo $var1[$k]." stimmt nicht mit ".$var2[$i]." überein.";

dann kommen Sachen bei der Ausgabe wie: "Weg stimmt nicht mit Weg überein."
Die Werte sind also wirklich definitiv gleich! Bei Wiederholungen ist es dann zumeist richtig. Mir kommt es so vor, als ob sich neu in die Datenbank gespeicherte Werte - Werte also die das erste mal aus der Datenbank ausgelesen werden - beim Vergleich nicht so funktionieren, wie sie funktionieren sollten. Das ist aber nur eine unlogische These. Ich hab für einfach keine Erklärung. Es ist mittlerweile halb drei und ich weiß immer noch nicht, woran das liegen könnte. Noch eine These ist, dass das Programm zu schnell durch die Schleifen rattert und dabei automatisch Fehler mit reinkommen, aber das kann ich mir auch nicht wirklich vorstellen. Naja.. ich hoffe jemand kann mir helfen.


Hier noch das Nötigste des besseren Verständnisses wegen.

[PHP]for ( $k = 0; $k < $num1; $k++)
{
for ( $i = 0; $i < $num2 $i++)
{
if ( $var1[$k] == $var2[$i] )
{
$bool++;
}
else{}
}
if( $bool == 0)
{
echo $var1[$k]." stimmt mit ".$var2[$i]." überein.";
}
else{}
}
[/PHP]

Gruß Christian

tele 28.11.2008 08:12

AW: Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2
 
Je nach Programmiersprache und Feldinhalt testet du nur, ob Referenzen gleich sind.

z.B. wenn du in Java ein

[code]String test = \"test\";
String test2 = \"test\";
if(test == test2){
System.out.println(\"gleich\");
}else{
System.out.println(\"nee\");
}[/code]
machst, bekommst du ein "nee" zurück.
Wenn du bei Programmiersprachen, welche Referenzen auf komplexe Typen (also alle nicht-Primitives bei Java, Arrays&Hashes bei Perl, Objekte bei PHP, etc.) sind, Vergleiche anstellen möchtest, welche sich um den Inhalt, nicht um die Referenz (Addresse im Speicher) kümmern, dann musst du entsprechend der Programmiersprache die passende Methode wählen.

Stringvergleich in Java:
[code]if(test.equals(test2)){[/code]

Stringvergleich in Perl:
[code]if(test eq test2){[/code]

Gruß

tele

daPR 28.11.2008 23:30

AW: Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2
 
Bei PHP überprüft er meines Erachtens schon den Inhalt der Variable, nicht die Referenz.

Was mir bei deinem Code komisch vorkommt,ist, dass wenn 2 Elemente gleich sind, $bool inkrementiert wird, aber bei der Auswertung dann bei $bool==0 ausgegeben wird, dass sie gleich sind. Und was passiert, wenn es mit mehreren Elementen des 2. Arrays übereinstimmt?

So stelle ich mir das vor:
[php]
for ( $k = 0; $k <= $num1; $k++)
{
for ( $i = 0; $i <= $num2 $i++)
{
if ( $var1[$k] == $var2[$i] )
{
$bool[$i]=true;
}
}
if( isset($bool))
{
foreach ($bool as $i_){
echo $var1[$k] .'stimmt mit '.$var2[$i_].' überein';
}

unset($bool);
}

[/php]Das ganze funktioniert auch nur wenn das Array numerisch indiziert ist.

tele 29.11.2008 00:04

AW: Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2
 
Ich meinte schon deutlich geschrieben zu haben, dass das bei PHP nur auf Objekte zutrifft ;-)

was den Vergleich von arrays angeht, im PHP kontext: [url=http://www.google.com/search?client=opera&rls=de&q=php+array+compare&sourceid=opera&num=100&ie=utf-8&oe=utf-8]php array compare - Google Search[/url]

im 2. link finden sich schon einfache Sachen.

Greeven 29.11.2008 00:07

AW: Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2
 
Jo so geht es auch. Die $bool hat für mich den Effekt, dass ich nach der for-Schleife davor weiß, ob es eine Übereinstimmung mindestens einmal gegeben hat oder nicht.

Meinen Fehler habe ich mittlerweile entdeckt. Die Abfrage war zwar richtig, aber ich hatte vergessen, die Werte - bevor ich sie in die DB speicher - zu trimmen. Aber das auch nur bei einigen und bei anderen wiederum wurde getrimmt (das speichern erfolgt in verschiedenen Bereichen der Seite )
So hatte ich mal einen Eintrag wie "Weg" und manchmal einen wie "Weg "
Dann ist natürlich klar, dass er mir sagt, dass es nicht übereinstimmt.

Und wieder was aus seinen Fehlern gelernt. Euch danke für die Hilfe.

Gruß ich

daPR 29.11.2008 00:39

AW: Schauen, ob Elemente aus Array1 übereinstimmen mit Elementen aus Array2
 
[quote=tele;589455]Ich meinte schon deutlich geschrieben zu haben, dass das bei PHP nur auf Objekte zutrifft ;-)
[/quote]
Hm stimmt ;)
Dann versteh ich nicht ganz was deine Antwort mit seinem Problem zu tun hat? ;)
Aber egal, hat sich ja nun erledigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2026, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.