Aus einem Array einen gesuchten Wert löschen !!
Marco
- php
Hallo zusammen,
nun jetzt habe ich ein Array $email wie folgt erstellt:
if ($aktion == "Austragen") {
$lines = file ('newsletter.txt');
$email = explode(";",$lines[0]);
}
Wie muss ich jetzt vorgehen wenn ich einen bestimmten Eintrag dieses Arrays löschen will. Also wenn ich jetzt die E-Mailadresse test@test.ch löschen möchte welche jrgendwo im Array enthalten ist.
Freue mich über Eure Hilfe und Tipps !!
Gruss Marco
Nabend,
Wie muss ich jetzt vorgehen wenn ich einen bestimmten Eintrag dieses Arrays löschen will. Also wenn ich jetzt die E-Mailadresse test@test.ch löschen möchte welche jrgendwo im Array enthalten ist.
Schau dir einmal die Funktion array_filter() an, das könnte etwas für dich sein (http://php3.de/array-filter).
Bis denne,
habe jetzt 3 mal alles durchgelesen aber verstehe diese funktion
nicht ganz.
denke aber das es trozdem nicht ganz das richtige ist, weil ich
möchte ja der suchbegriff z.b. test@test
dann imm array suchen und wenn er vorhanden ist löschen ansonsten
wenn er nicht vorhanden ist einfach
echo "eintrag nicht vorhanden";
gruss marcolino
Hello,
denke aber das es trozdem nicht ganz das richtige ist, weil ich
möchte ja der suchbegriff z.b. test@testdann imm array suchen und wenn er vorhanden ist löschen ansonsten
wenn er nicht vorhanden ist einfachecho "eintrag nicht vorhanden";
Und so wie Du speicherst, geht das auch nicht unbedingt, denn wenn in einer Zeile nur _ein_ Wert steht und kein Semikolon, dann steht anschließend in Deinem explodeten Wert $wert."\n" drin.
Es ist leichter, so vorzugehen, wie ich das in [pref:t=69934&m=402625] beschrieben habe.
Wenn schon Arrays, dann richtig. PHP ist da sehr leistungsfähig.
Liebe Grüße aus http://www.braunschweig.de
Tom
hi,
Wie muss ich jetzt vorgehen wenn ich einen bestimmten Eintrag dieses Arrays löschen will.
[pref:t=69878&m=402257]
gruss,
wahsaga
Hello Marco,
das kann man ja nicht mit ansehen, wie Du leidest ;-)
Nochmal die zwei Tipps.
Voraussetzung: es werden nicht zuviele Adressen (so ca. 400-500 entsprechend ca. 100k mit Zusatzdaten sollten die Grenze bleiben)
Wenn nur die email-@ gespeichert werden sollen, kannst Du mit einer Adresse pro Zeile und mit file() arbeiten.
Da Du aber zur Bearbeitung sowieso die ganze Datei einlesen musst, kannst Du auch gleich mit
$email1 = "tom@bitworks.de";
$_mails = array();
$_mails[$email1] = array();
$_mails[$email1]['vorname'] = "Thomas";
$_mails[$email1]['alter'] = "uHu";
$_mails['marco@web.de']['vorname'] = "Marco";
$_mails['marco@web.de']['alter'] = "unbekannt";
usw. arbeiten.
Lass Dir das Array mal zur Kontrolle mit
echo "<pre>";
print_r($_mails);
echo "</pre>";
ausgeben.
Das Array serialisierst Du dann mit
$data = serialize($_mails);
und schreibst es weg mit
Dateihandle zum Schreiben besorgen möglich ?
Datei locken möglich ?
Datei schreiben mit fwrite($fh,$data);
Datei schließen
(Lock verschwindet dann automatisch)
Und wenn Du was ändern willst:
Dateihandle zum Lesen und Schreiben ("r+") besorgen möglich ?
Datei locken möglich ?
Datei auslesen bis zum Ende mit fread($fh,$data,filesize($dateiname));
array wiederherstellen mit $_mails = unserialize($data);
Neue Daten reinscheriben ins Array:
$_mails['tom@bitwiorks.de']['vorname'] = "Thomas Jürgen";
$_mails['tom@bitwiorks.de']['alter'] = "45";
Wenn der Eintrag vorhanden war, wird er überschreiben, wenn er neu ist, wird er angelegt.
Und wenn Du einen Empfänger löschen willst:
if (isset($_mails["loesch@mich.nie"])) unset($_mails["loesch@mich.nie"]);
und weg ist er.
array serialisieren mit $data = serialize($_mails);
und wegschreiben:
fseek($fh, 0); # weil der zeigen am Ende stand und nicht am Anfang
ftruncate($fh, 0); # Datei leer machen. Nur nötig, wenn das neue
Array kleiner ist, als das alte.
fwrite($fh, $data);
Datei schließen
(Lock verschwindet dann automatisch)
Wenn Du Dein Programm fertig hast, Postest Du das hier nochmal (den Link auf ein *.txt) dann schau ichs nochmal an.
Liebe Grüße aus http://www.braunschweig.de
Tom