Tom: arrayelement wird nicht gelöscht...

Beitrag lesen

Hello,

$clid = $_GET['clid'];
  $open_file = @fopen($file,'a')
    or die("Konnte Datei <b>$open_file</b> nicht öffnen");
  flock($open_file,2);
  $file_array = file($file);
  foreach($file_array as $key => $value) { #array mit der betreffenden clid heraussuchen
    if(strpos($value, $clid) !== false) {
   $comment_edit = $file_array[$key];  #dieses in variable speichern
   unset($file_array[$key]); #sofort löschen
            ^siehe Anmerkung
}
  }


> >   
> Anmerkung:  
> <http://de.php.net/manual/de/control-structures.foreach.php>  
> ...  
> Anmerkung: Beachten Sie auch, dass foreach mit einer Kopie des angegebenen Arrays arbeitet, nicht mit dem Array selbst. Deshalb wird auch der Arrayzeiger nicht wie bei dem each()-Konstrukt verändert und Veränderungen an ausgegebenen Arrayelementen haben keine Auswirkung auf das originale Array. Trotzdem wird der interne Arrayzeiger des originalen Arrays bei der Verarbeitung bewegt. Angenommen, die foreach-Schleife ist komplett abgearbeitet, wird der interne Arrayzeiger (des originalen Arrays) auf das letzte Element zeigen.  
  
Das ist hier aber schlecht beschrieben und wahrscheinlich deshalb auch von Dir missverstanden worden. $file\_array (die Adresse, die sich dahinter verbirgt) refernziert hier immer das Original-Array, auch in der foreach()-Schleifenfunktion. Der Passus "Kopie" bezieht sich auf die $value-Elemente. Der "Zeiger" auf die $value-Elemente zeigt jeweils auf eine Kopie der Array-Elementes.  
  
  $file\_array[$key]  referenziert aber immer das Original-Element.  
  
Intern wickelt PHP das noch anders ab.  
  
  
Der Fehler muss aber irgendwo anders stecken.  
  
  
  
  
Harzliche Grüße aus <http://www.annerschbarrich.de>  
  
Tom

-- 
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen  
Nur selber lernen macht schlau