Element aus Array löschen mit unset()

schiese

Erfahrenes Mitglied
Hi,
ich möchte eine Textdatei auslesen -> Aufbau
Code:
zeile 1
zeile 2
zeile 3
zeile 4
und mit hilfe von unset() eine beliebige Zeile löschen. Das klappt auch super. Aber jetzt möchte ich die noch vorhanden Elemente wieder in die Textdatei schreiben. Da kommen dann die Fehler. Wenn ich nicht die letzte Zeile lösche, löscht er zwei Zeilen.

PHP:
if ( $id == "" ) {
	echo "Irgendetwas stimmt mit Ihrer ID nicht!";
} else {

$lesen = file("nachrichten.txt");

unset($lesen[$id]);

echo "<pre>";
print_r($lesen);
echo "</pre>";



$datei = "nachrichten.txt";
$fp = fopen($datei,"w");
fwrite($fp,"");
fclose($fp);

$datei2 = "nachrichten.txt";
$fp2 = fopen($datei2,"a+");
for($m=0;$m<count($lesen);$m++) {
fwrite($fp2,$lesen[$m]);
}
fclose($fp2);
Wahrscheinlich liegt es dadran, dass ein Schlüssel-Wertpaar fehlt und ich mit ner for-Schleife nicht weiterkomme. Hat jemand eine Idee?

schiese
 
So recht sehe ich nicht, woran es liegen könnte...ich weiss aber auch nicht, warum du den Inhalt der Datei erst löschst, um dann etwas reinzuschreiben.

PHP:
$fp = fopen("nachrichten.txt","w");
fwrite($fp,trim(implode("\n",$lesen))); 
fclose($fp);
sollte eigentlich reichen.
 
So, wie es Sven beschrieben hat, ist es besser.

Damit aber deine Lösung auch funktionert, musst du die Keys erneuern, damit keine Lücken bleiben. Dass kannst du mit
PHP:
$lesen = array_merge($lesen, array());
hinbekommen.
 
Beachte auch, dass so ein Array-Index bei 0 beginnt....deine IDs müssen das auch tun, damit du die richtige Zeile erwischst.
 
Irgendwie geht das doch nicht! So schreibe ich etwas in die Datei
PHP:
$eintragen = $_POST['schreiben'];

$datei = "nachrichten.txt";
$fp = fopen($datei,"a+");
fwrite($fp,$eintragen."\n");
fclose($fp);

Wenn ich jetzt eine Zeile löschen will und Svens Code nehme, habe ich hässliche Leerzeilen!
Hier der Link

Mal mein der Code:
PHP:
$lesen = file("nachrichten.txt");

unset($lesen[$id]);

echo "<pre>";
print_r($lesen);
echo "</pre>";




$fp = fopen("nachrichten.txt","w");
fwrite($fp,trim(implode("\n",$lesen))); 
fclose($fp);

schiese
 
Anderer Vorschlag... diesmal getestet :-(
PHP:
<?php 
$datei = "nachrichten.txt"; 
$lesen = preg_split('/[\r\n]+/m',file_get_contents($datei));
array_splice($lesen,($ID-1),1);
$fp = fopen("nachrichten.txt","w");
fwrite($fp,trim(implode("\n",$lesen))); 
fclose($fp);
?>
 
Sollte man, wenn man in Dateien schreibt, nicht besser "\r\n" für eine neue Zeile nehmen? Wenn ich nur \n nehme, hab ich immer diese komischen Kästchen, statt neue Zeilen.
 
Zurück