Automatisch Suchen?

M

mstar

Hallo.
Ich habe 2 Textdateien.

In der ersten steht folgendes drin:
Code:
programm;1.0;10.10.2008;
programm2;1.1;10.11.2008;

In der zweiten steht folgendes drin:
Code:
programm;2.0;10.10.2008;
programm2;2.1;10.11.2008;

Wie bekomme ich es hin das PHP automatisch den bzw. die größte version liest und sie mir dan ausgibt?

Vielen Dank im Vorraus.
 
PHP:
/**
	Beispiel zum Vergleich von Versionsnummern, welche in CSV-Dateien hinterlegt sind
	
	@version 1.0.2
**/

/*
	Hier lesen wir die Datei 1 aus, und zerlegen das ganze mal in
	ein Array (jede Zeile ein Element)
*/
$buffer="";
$datei=fopen("1.txt", "r") or die("Kann Datei 1 nicht öffnen!");
while(!feof($datei)) {
	$buffer.=fgets($datei, 1024);
}
fclose($datei);
$string1=explode("\n", $buffer);

/*
		Hier lesen wir die Datei 2 aus, und zerlegen das ganze mal in
		ein Array (jede Zeile ein Element)
	*/
$buffer="";
$datei=fopen("2.txt", "r") or die("Kann Datei 2 nicht öffnen!");
while(!feof($datei)) {
	$buffer.=fgets($datei, 1024);
}
fclose($datei);
$string2=explode("\n", $buffer);

/*
	Jetzt müssen wir Zeile für Zeile umwandeln und die Felder rausholen
	Dann erstellen wir noch ein Array à la 
		$programme["firefox"]="3.0.3;
		$programme["test"]="1.1.3;
	
	Dies passiert vorerst nur mal mit den Inhalten der ersten Datei (Hier noch keine 
	Überprüfungen, da das ja die ersten Versionsdaten für das Programm sind.
*/
for($i=0; $i<count($string1); $i++) {
	$buffer=explode(";", $string1[$i]);
	$programme[$buffer[0]]=$buffer[1];
}

/*
	Hier zerlegen wir dann auch den Inhalt der 2ten Datei und benutzen die Funktion
	version_compare() um die Versionsnummern zu vergleichen.
	
	Wenn die neuen Daten eine höhere Versionsnummer enthalten, dann werden die alten
	überschrieben.
*/
for($i=0; $i<count($string2); $i++) {
	$buffer=explode(";", $string2[$i]);
	if($programme[$buffer[0]] != null) {		// Programm schon drinnen
		if(version_compare($programme[$buffer[0]], $buffer[1], "<")) {	// Neuere Version
			$programme[$buffer[0]]=$buffer[1];
		}
	}
}

var_dump($programme);		// Debug-Ausgabe

Erklärungen dürften eigentlich genug drinnen stehen ;) Falls noch Fragen bestehen, einfach stellen.

Das ganze erzeugt dann (mit deinen Daten oben) folgende Ausgabe:
Code:
array(2) {
  ["programm"]=>
  string(3) "2.0"
  ["programm2"]=>
  string(3) "2.1"
}
Getestet von mir gerade mit dem PHP-CLI Client unter Linux, PHP-Version 5.2.4


Gruß
Bratkartoffel
 
Zuletzt bearbeitet:
Kleine Optimierungshinweise:

PHP:
$buffer="";
$datei=fopen("1.txt", "r") or die("Kann Datei 1 nicht öffnen!");
while(!feof($datei)) {
    $buffer.=fgets($datei, 1024);
}
fclose($datei);
$string1=explode("\n", $buffer);
PHP:
$string1 = file("1.txt");

Sieht doch viel schöner aus, oder nicht?

PHP:
for($i=0; $i<count($string1); $i++) {
PHP:
$string1Cnt = count($string);
for($i = 0; $i < $string1Cnt; $i++) {

Die zweite Variante, weil sonst [phpf]count[/phpf] bei jedem Schleifendurchlauf neu ausgeführt wird.
 
Kleine Optimierungshinweise:

PHP:
$buffer="";
$datei=fopen("1.txt", "r") or die("Kann Datei 1 nicht öffnen!");
while(!feof($datei)) {
    $buffer.=fgets($datei, 1024);
}
fclose($datei);
$string1=explode("\n", $buffer);
PHP:
$string1 = file("1.txt");

Sieht doch viel schöner aus, oder nicht?

PHP:
for($i=0; $i<count($string1); $i++) {
PHP:
$string1Cnt = count($string);
for($i = 0; $i < $string1Cnt; $i++) {

Die zweite Variante, weil sonst [phpf]count[/phpf] bei jedem Schleifendurchlauf neu ausgeführt wird.

Danke, man lernt nie aus :)
 
Zurück