Daten vergleichen geschlossen 

Status
Für weitere Antworten geschlossen.

katzentreiber

Registered +
Registriert
Aug. 2008
Beiträge
31
Hallo, hoffe hier kann mir jemand helfen.
Eigentlich "dachte" ich ne einfache Aufgabe.

Ich habe zwei .csv Dateien mit unterschidlichem Inhalt und möchte eine Ausgabe, welche Daten von Datei 1 in Datei 2 fehlen.

PHP:
$datei1 = "../pflichtwerkzeuge.csv"; // Name der Pflicht-Werkzeugdatei
$datei2 = "liste.csv"; // Name der eigenen Werkzeugdatei 
$array1 = file($datei1); // Datei in ein Array einlesen
$array2 = file($datei2); // Datei in ein Array einlesen
foreach ($array1 as $suchbegriff)
{
//echo $suchbegriff . " - Suchbegriff
" ; // Inhalt zum testen ausgeben 
$result = array_diff ( $array2, $array1 );

while ( list ( $key, $val ) = each ( $result ) )
{
echo $key . ': ' . $val . '
';
}

}

Da funktioniert soweit und auf der Seite wird jeweils der Suchbegriff ausgegeben. Eigentlich ist Datei2, in der ich suchen will ja in array2 enthalten und ich kann den Inhalt auch mit echo sehen. Aber gefunden wird nicht.

Es soll so werden, das ich die in $datei2 fehlenden Inhalte auf den Bildschirm ausgebe oder in eine Datei schreibe um sie mit include auf den Bildschirm zu holen und drucken zu können.
In meinem Leichtsinn dachte ich ja ist ganz einfach mit array_diff() zu bewerkstelligen, aber das Ergenis bleibt immer gleich, er Zeigt immer alle Inhalte an, auch die gleichen...

Hoffe auf eure Ideen und Hilfe,

:thx:
 
Zuletzt bearbeitet von einem Moderator:
Kann es sein, dass du nicht richtig gelesen hast, was array_diff eigentlich tut?

PHP: array_diff - Manual

Return Values

Returns an array containing all the entries from array1 that are not present in any of the other arrays.

mit
PHP:
$result = array_diff ( $array2, $array1 );
würde er nur das auflisten was zwar in array2 vorkommt, aber nicht in array1.

Meintest du nicht eher
PHP:
$result = array_diff ( $array1, $array2 );
?

Die foreach-Schleife steht da nur wegen des Debuggings nehm ich an?
 
Hi undeath,
upps -

PHP:
$result = array_diff ( $array1, $array2 );
ist natürlich richtig und so vergleicht er auch. Aber er vergleicht anscheinend den Index mit und nur wenn der gleich ist, lässt er es als unterschied aussen vor und schreibt es nicht mit in die Liste...

Ich suche eine Möglichkeit, Nummern der 1. Liste in der zweiten zu suchen und nur die fehlenenden auszugeben.
Wird wohl nichts weiter übrig bleiben, als jede Numnmer einzeln in der Datei zu suchen und bei vorhandensein zu ignorieren und bei fehlen in eine neue Liste zu schreiben.
Ich hoffe, ich kriege das hin, dafür war auch die Schleife gedacht, war mein 1. Ansatz, biss ich den array_diff Befehl gesehen habe.

Bin eigentlich kein Programmierer und habe mir alles "erlesen" und so nen Werkzeugmanager gebaut. www.werkzeugmanager.com, und suche jetzt noch die Möglichkeit, die vorhandenen Werkzeuge mit den Pflichwerkzeugen abzugleichen, ohne jede Nummer von Hand einzutippen...

Bin für jede Hilfe dankbar.

:thx:
 
Zuletzt bearbeitet von einem Moderator:
Hi,
der Index wird bei array_diff nicht beachtet. Stell sicher, dass die beiden Dateien gleich aufgebaut sind.
Mein Verdacht ist, dass die eine Datei mit \n endet und die andere mit \r\n.
probiere mal array_map('trim',file($datei1)); und array_map('trim',file($datei2)); einzubinden.
Das würde meinen Verdacht prüfen.

Gruß
Broken Sword

P.S.
Bitte halte dich mit unnützen blinke-Bildchen/Smilies zurück.
 
Zuletzt bearbeitet von einem Moderator:
Hi Broken Sword,
trim hilft auch nicht, ich habe extra genau gleiche Dateien erstellt und da klappt es auch, wenn die Dateien den gleichen Inhalt haben.
Da aber normal die Daten nicht an der gleichen Stelle - sprich Zeilenummer - stehen, ist es für array_diff wieder ein Unterschied.


Ich habe das gleiche jetzt mit in_array probiert:

PHP:
$x = $HTTP_GET_VARS['action'];
if ($x=="suchen") {
$suchbegriff = $_POST['suchbegriff'];
$db = $_POST['db'];
$dateivw = "../vwpflicht.csv";
$dateiaudi = "../audipflicht.csv";
$dateiskoda = "../shodapflicht.csv";
$dateiseat = "../seatpflicht.csv";
$eigene = 'liste.csv';
$array1 = file($db); // Datei in ein Array einlesen
$array2 = file($eigene); // Datei in ein Array einlesen
array_map('trim',$array1); 
array_map('trim',$array2); 
echo 'Info: suchen ist an, Verwendete Datenbank lautet '; //zum testen anschalten
echo $db . "

"; //zum testen anschalten
foreach ($array1 as $suchbegriff)
{ 
if ( in_array ( $suchbegriff, $array2 ) )
{
echo $suchbegriff . 'gefunden!' . "
";
}

if ( ! in_array ( $suchbegriff, $array2 ) )
{
echo $suchbegriff . 'nicht gefunden!
';
} 
} } 
exit;


Funzt aber auch nur, wenn die Daten in der gleichen Zeilennummer stehen. Sonst steht überall "nicht gefunden".

Ich brauche eine Schleife, die Zeile für Zeile (pro Zeile nur eine ca 5 stellige Nummer) aus der einen Datei mit den Einträgen in der anderen Datei (wieder pro Zeile eine ca 5 stellige Nummern) vergleicht und die fehlenden Nummern ausgibt. Dabei müssen alle Nummern der ersten Datei mit allen Nummern der zweiten Datei verglichen werden. Ich kriegs irgendwie nicht hin. Mein Latain ist ziemlich am Ende...:read:
Wäre super, wenn mir das jemand zusammenbauen könnte
:thx: im Voraus
-
 
Probiere mal

PHP:
$x = $HTTP_GET_VARS['action'];
if ($x=="suchen") {
$suchbegriff = $_POST['suchbegriff'];
$db = $_POST['db'];
$dateivw = "../vwpflicht.csv";
$dateiaudi = "../audipflicht.csv";
$dateiskoda = "../shodapflicht.csv";
$dateiseat = "../seatpflicht.csv";
$eigene = 'liste.csv';
$array1 = array_map('trim',file($db)); // Datei in ein Array einlesen
$array2 = array_map('trim',file($eigene)); // Datei in ein Array einlesen
var_dump(array_diff($array1,$array2));

Gruß
Broken Sword
 
Hi Broken Sword,
super - funzt jetzt - vielen vielen Dank.
Es kann so einfach sein. :depp:
Lag am einlesen der Arrays

PHP:
$array1 = array_map('trim',file($db)); // Datei in ein Array einlesen
$array2 = array_map('trim',file($eigene));

:bing::bing::bing::bing::bing:
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten