2016-08-14 1 views
0

Ich habe eine Textdatei, in der 50000 E-Mail-IDs gespeichert sind. Ich muss Daten aus dieser Datei filtern, indem ich E-Mail-IDs von Abbestellungen lösche.Lösche verschiedene Anzahl von Datensätzen aus einer Datei in PHP

Ich habe diesen Code versucht, aber kein Glück

<?php 
ini_set("memory_limit","1520M"); 
ini_set('display_errors',1); 
error_reporting(E_ALL); 
$emails = $_POST['emails']; 
$data = $_POST['data']; 
$path= $_SERVER['DOCUMENT_ROOT']."/data/$data"; 
$lines = file($path); 
$remove = explode("\n",$emails); 
foreach ($remove as $rm) 
{ 
foreach($lines as $key => $line) 
if(stristr($line, $rm)) unset($lines[$key]); 
} 
$data1 = implode('', $lines); 
$file = fopen($path, "w+"); 
fwrite($file, $data1); 
fclose($file); 
?> 

Wie kann ich die unterschiedliche Anzahl von E-Mail-IDs aus einer Datei löschen und halten die anderen IDs in der Datei bleiben?

txt Datei enthalten E-Mails ids als
[email protected] [email protected] [email protected]

........
........

und ich brauche
[email protected] [email protected] E-Mails von der löschen Datei.

+0

Datei bereits ein Array mit allen Linien gibt, so gibt es keine Notwendigkeit, dass die Explosion durch Newline –

+0

explode wird verwendet, weil ich den E-Mail-IDs aus einem Formular dieses Posting Seite zB $ _POST ['emails'] im Code gegeben. Diese E-Mails sind übereinstimmend und sollten gelöscht, aber nicht gelöscht werden. – Shaun

+0

Können Sie ein Beispiel zeigen, wie genau Ihre E-Mails gespeichert sind? –

Antwort

0

Hier ist sie:

ini_set("memory_limit","1520M"); 
error_reporting(E_ALL); 

// if something has been posted 
if (isset($_POST['emails'])) 
{ 
    $emails_delete = preg_split('/\r\n|[\r\n]/', $_POST['emails']); 
    $emails = file('emails.txt'); 

    foreach ($emails_delete as $delete) 
    { 
     $email = trim($delete); 

     // check if the email is in the list 
     $pos = array_search($email, $emails); 
     if (false !== $pos) 
     { 
      unset($emails[$pos]); 
     } 

     // save it again 
     file_put_contents('emails.txt', $emails); 
    } 
} 
?> 
<form action="" method="post"> 
    <textarea name="emails"></textarea><br /> 
    <input type="submit" value="Delete" /> 
</form> 
+0

Hey Manuel, Danke für deine Antwort, aber der Code löscht nicht die E-Mail-Adressen aus Formular – Shaun

+0

Yeah es Entfernt es nur einmal. Idk ist falsch damit, tbh, es ist ein komisches Newline-Ding. Darf ich Ihnen empfehlen, eine Datenbank zu verwenden? Würde die Dinge so viel einfacher $ machen. $ –

+0

Meine E-Mail-Liste sind in einer Textdatei gespeichert – Shaun

Verwandte Themen