LSpreee: Verhalten von explode bei leerem String

Hallo Gemeinde,

ich versuch es immer erst selbst rauszufinden, aber das ist wieder eine Sache für dieses Forum.

Es geht um diese Funktion, welche mir den Teil einer Zeile aus einer txt Datei als Array zurückgeben soll.

Beispiel für die Textzeile $row=3
access_area:forum;upload

Funktion:

  
function line_to_array($filename,$row,$trennzeichen){  
  
 $filedata = file($filename);  
  
 $start          = strpos($filedata[$row],":");  
 $filedata[$row] = substr($filedata[$row],$start+1);  
  
 $export_array   = explode($trennzeichen,$filedata[$row]);  
 $export_array   = rtrim_array($export_array);  
  
 return $export_array;  
  
}

Aufruf:

  
$access_area = line_to_array("./user/Admin.txt","3",";");

Lange Rede kurzer Sinn: Ich erhalte einen Array mit der Anzahl 1, wenn hinter dem "access_area:" in der txt Datei nichts mehr steht, der String für das explode also leer sein sollte. Die Frage: wie kann ich vom explode ein Array erhalten, dass als Elementanzahl 0 hat?
Oder ist dieses verhalten von explode normal und ich muss eine zweite Abfrage programmieren?

Vielen Dank

  1. echo $begrüßung;

    wie kann ich vom explode ein Array erhalten, dass als Elementanzahl 0 hat?

    Von explode() gar nicht. Du bekommst immer mindestens ein Element zurück. Wenn du bestimmte Teile nicht haben willst, musst du sie entweder vorher entfernen oder nachher löschen beziehungsweise nur die benötigten Teile weiterverwenden.

    Zum Löschen gibt es unset(), für teilweisen Zugriff das altbekannte [key] und diverse Array-Funktionen (à la array_slice() etc.). Außerdem gibt es noch das Sprachkonstrukt list(): list(, $zweiterTeil) = explode(...);

    echo "$verabschiedung $name";

    1. Von explode() gar nicht. Du bekommst immer mindestens ein Element zurück.

      Danke, sehr konkrete Antwort. Leider steht dieser Satz nicht im Manual. Ich finde er gehört da hin.

      Ok, dann habe ich es jetzt so gemacht, dass ich den Eingangsstring in explode abfrage. Das erschien mir am einfachsten.

      Code:~~~php

      function line_to_array($filename,$row,$trennzeichen){

      $filedata = file($filename);

      $start          = strpos($filedata[$row],":");
       $filedata[$row] = rtrim(substr($filedata[$row],$start+1));

      if ($filedata[$row]!=""){
        $export_array   = explode($trennzeichen,$filedata[$row]);
        $export_array   = rtrim_array($export_array);
       }

      else
        $export_array = array();

      return $export_array;

      }

        
        
      Vielen Dank nochmal. Ich liebe dieses Forum :)
      
      1. echo $begrüßung;

        Von explode() gar nicht. Du bekommst immer mindestens ein Element zurück.
        Danke, sehr konkrete Antwort. Leider steht dieser Satz nicht im Manual. Ich finde er gehört da hin.

        Wieso? Es ist doch im Grunde genommen logisch, dass beim Aufteilen von Etwas nie 0 Teile entstehen können, denn sonst hieße es nicht Aufteilen sondern Verschwindenlassen.

        echo "$verabschiedung $name";

      2. Hi,

        Danke, sehr konkrete Antwort. Leider steht dieser Satz nicht im Manual. Ich finde er gehört da hin.

        Deswegen steht das auch dort.

        http://de2.php.net/manual/de/function.explode.php sagt:
        ZITATANFANG
        Rückgabewerte

        Ist delimiter ein leerer String (""), so gibt explode() FALSE zurück. Enthält delimiter einen Wert, der nicht in string vorkommt, gibt explode() ein Array zurück, das den string als einziges Element enthält.
        ZITATENDE

        Für nichtleeren Delimiter und leeren String gilt der zweite Satz.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.