susi: zeilenumbruch bei implode

hallo,

will ein array in einen string aufsplitten jedoch soll jeder index in eine neu zeil ein ein file geschrieben werden! wie mach ich dies?
mit :
$new_file= implode ( "/n", $array_output);

macht er immer eine leerzeile oben und eine unten!
also:

blablabla

blablabla

ich will jedoch:
blablabla
blablabla

haben!

how to?

THX susi

  1. Hi!

    $new_file = "";  
    for($i = 0; $i < count($array_output); $i++)  
            $new_file .= $array_output[$i] + "\n";
    

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. Hi,

      was mir noch eingefallen ist. Deine Lösung mit der implode-Funktion müsste auch Funktionieren. Vielleicht hat jedes Array-Element ja schon einen Zeilenumbruch.

      MfG Hopsel

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
      1. Hi,

        hab bereits versuche "\n" vor bzw. nach dem implode versucht jedoch funtkioniert nichts davon.
        es wird immer eine leerzeile eingefügt und kein zeilenumbruch!

        lg, susi

        1. Hallo!

          hab bereits versuche "\n" vor bzw. nach dem implode versucht jedoch funtkioniert nichts davon.
          es wird immer eine leerzeile eingefügt und kein zeilenumbruch!

          liest Du die Daten mit file() zeilenweise ein? In dem Fall hast Du in jedem Array-Element noch einen Zeilenumbruch am Ende. Wenn Du implode('', $array) verwendest müsste es funktionieren. Oder besser beim Einlesen per (r)trim() die Umbrüche entfernen.

          Grüße
          Andreas

          --
          SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
    2. Hello Hopsel,

      $new_file = "";

      for($i = 0; $i < count($array_output); $i++)
              $new_file .= $array_output[$i] + "\n";

        
      wann hörst Du endlich auf, PHP-Arrays mit for()-Schleifen zu traktieren? \*wunder\*  
      Es gibt dafür die Spezialfunktion foreach(), und die hat gegenüber Deiner Schleife viele Vorteile.  
        
      Außerdem nimmt man in die Laufbedingung keine Funktionen auf, die immer dasselbe Ergebnis produzieren werden. Das würde man dann vor der Schleife einmal berechnen und nicht bei jedem Durchlauf.  
        
      Wenn man die Schleife über den Index des "Arrays" laufen lässt, dann müsste man vor dem Zugriff auf das Array-Element der Ordnung halber isset($\_element[$i]) prüfen. Es könnte ja vor dem Start der Schleife ein Element entfernt (unset()) worden sein. Das würde dann einen Fehler auslösen.  
        
      Und explode() macht das alles alleine ;-))  
        
      Harzliche Grüße aus <http://www.annerschbarrich.de>  
        
      Tom
      
      -- 
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen  
      Nur selber lernen macht schlau  
      
      
      1. Hi,

        wann hörst Du endlich auf, PHP-Arrays mit for()-Schleifen zu traktieren? *wunder*

        bin sonst in C zu Hause. Und da mach ich das nun mal so... (oder ähnlich)

        Es könnte ja vor dem Start der Schleife ein Element entfernt (unset()) worden sein.

        Aber ich lasse doch die Schleifenabbruchbedingung mit count() ermitteln. Wenn vorher ein Element entfernt wurde, muss das doch automatisch dekrementiert werden, oder?

        MfG Hopsel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        1. Hallo!

          Es könnte ja vor dem Start der Schleife ein Element entfernt (unset()) worden sein.

          Aber ich lasse doch die Schleifenabbruchbedingung mit count() ermitteln. Wenn vorher ein Element entfernt wurde, muss das doch automatisch dekrementiert werden, oder?

          Ja, aber der Index wird nicht angepasst. Wenn Du einen Array hast

          $demo = array( 0 => 'a', 1 => 'b', 2 => 'c');

          und dann

          unset($demo[1]);

          hast Du am Ende folgendes im Array stehen:

          array( 0 => 'a', 2 => 'c');

          Wenn Du jetzt eine Schleife mit count() in der Abbruchbedingung verwendest, ergibt count($demo) ja 2, entsprechend würde nur $demo[0], und $demo[1] (welches ja nicht mehr existiert) erreicht, $demo[2] wird dagegen nicht mehr bearbeitet.

          Wenn Du danach array_values() verwendest, hättest Du

          array( 0 => 'a', 1 => 'c');

          Ist aber unnötig eben weil es ja foreach gibt ;-)

          btw. count() ist zwar ein Overhead weil es ein Funktionsaufruf ist, und nicht einfach nur aus einer Variable gelesen wird, trotzdem ist es derselbe Algorithmus, da count nicht jedesmal die Elemente zählt, sondern den Counter den der ZVAL Array mitführt, direkt abfragt.

          Grüße
          Andreas

          --
          SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
      2. Moin!

        Hello Hopsel,

        $new_file = "";

        for($i = 0; $i < count($array_output); $i++)
                $new_file .= $array_output[$i] + "\n";

        
        >   
        > wann hörst Du endlich auf, PHP-Arrays mit for()-Schleifen zu traktieren? \*wunder\*  
          
        Er hat vermutlich, wie ich auch, früher mal ziemlich viel in einem BASIC-Dialect programmiert der kein foreach kannte.  
          
          
        MFFG (Mit freundlich- friedfertigem Grinsen)  
          
        fastix®  
        
        -- 
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen. 
        
        1. Lieber fastix,

          Er hat vermutlich, wie ich auch, früher mal ziemlich viel in einem BASIC-Dialect programmiert der kein foreach kannte.

          War dieser BASIC-Dialekt in 64KB Arbeitsspeicher untergebracht? So Brotkasten-förmig?

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.

          1. Moin!

            Er hat vermutlich, wie ich auch, früher mal ziemlich viel in einem BASIC-Dialect programmiert der kein foreach kannte.
            War dieser BASIC-Dialekt in 64KB Arbeitsspeicher untergebracht? So Brotkasten-förmig?

            Nein. Er war eher flach und es gab ihn mit integrierter Tastatur (Nur mit Hammer und Meissel zu bedienen, hat bei jedem erfolgreichem Tastendruck aber zwecks Quittung gepiept...), externer Tastatur (besser, aber ebenfalls ohne Ziffernblock) 16 bis 32 Kilobyte Speicher, einer Taktfrequenz im einstelligen Kiloherzbereich (4? 8?). Als Monitor diente ein Fernseher, als Datenspeicher ein gewöhnliches Tonbandgerät. Damals konnte man hören, ob er gerade ein Programm oder Daten sicherte :)

            Ich weiss noch, dass ich u.a. ein Basic-Programm (drei(!)dimensionale Kurvenbetrachtung mit allem Schnickschnack) geschrieben habe, welches sich selbst modifizieren konnte (Mathe Funktion mit poke ... oder war es peek.. an das Ende geschrieben, mitsamst dem return für die Basic-Funktion.) Laufzeit: Bis zu 20 Minuten (ein Durchlauf zum bestimmen des Maßstabes, einer zwecks hinpixeln der Grafik.)

            Bezeichnung: KC85/KC85-1 (bis -3) Preis: 4000 bis 8000 Ostmärker. Er stand aber im Rechnerlabor und ich war ständig eingeschrieben.

            Später hatte ich nochmals ein ähnlich leistungsfähiges, aber tragbares Teil mit 32kb Arbeitsspeicher. Das hatte ein einzeiliges Display und war deswegen als als "nichtprogrammierbarer" Taschenrechner zu Prüfungen zugelassen ("programmierbare Taschenrechner" waren laut Wessi-Professor-an-TUC-Definition mehrzeilig. Der Fernseher entfiel, Daten und programme wurden ebenfalls auf Tonbandkassette gesichert. Das Teil war von Sharp.

            Ich habe Dank des Teils die Statistik-Prüfung in der halben Zeit erledigt. Andererseits hatte ich zuvor die doch wochenlange Programmierarbeit (der Arbeitsspeicher musste sorgfältig ausgenutzt werden) etwas unterschätzt. Naja.. seitdem weiss ich das verwursten wiederverwertbarer Funktionen zu schätzen :)

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Liebe Susi,

    will ein array in einen string aufsplitten

    Aufsplitten?? Dazu bedarf es explode, nicht implode. Letzteres ist zum Zusammenfassen da.

    ... jedoch soll jeder index in eine neu zeil ein ein file geschrieben werden!

    Diesen Satz verstehe ich nicht. Deswegen kann ich Dir wahrscheinlich nicht helfen! Mal sehen...

    $new_file= implode ( "/n", $array_output);

    Damit wird jedes Element des Arrays $array_output hinter das vorhergehende gesetzt, dazwischen ein "\n".

    Beispiel:
    $array_output {
    [0] => "Bananen",
    [1] => "Kirschen",
    [2] => "Zwetschgen",
    [3] => "Orangen"
    }

    Deine obige Anweisung würde ergeben:

    $new_file = "Bananen\nKirschen\nZwetschgen\nOrangen";

    Sollte ich mich irren, so korrigiere mich bitte jemand!

    macht er immer eine leerzeile oben und eine unten!
    also:

    blablabla

    blablabla

    ich will jedoch:
    blablabla
    blablabla

    Es scheint, als ob jedes Element Deines Arrays am Ende bereits einen Zeilenvorschub hat. Ich nehme mein Beispiel wieder:

    $array_output {
    [0] => "Bananen\n",
    [1] => "Kirschen\n",
    [2] => "Zwetschgen\n",
    [3] => "Orangen\n"
    }

    Deine obige Anweisung würde ergeben:

    $new_file = "Bananen\n\nKirschen\n\nZwetschgen\n\nOrangen\n";

    Sollte dem so sein, dann müsstest Du entweder auf den ersten Parameter in Deinem implode-Aufruf "verzichten",
    -> $new_file = implode("", $array_output);
    oder aber jedes Array-Element _vorher_ von überflüssigen Zeichen dieser Art befreien. Das geht mit der trim()-Funktion.
    -> for($i=0; $i<=count($array_output); $i++) $array_output[$i] = trim($array_output[$i]);

    Hoffentlich konnte ich Dir weiterhelfen.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.