Ankündigung

Einklappen
Keine Ankündigung bisher.

Array zu string

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array zu string

    Hallo,
    ich habe ein Upload/Convert Script mit dem ich XLSX Dateien zu CSV konvertieren kann. (Source: http://davidacollins.com/weblog/xlsx2csv )

    Dieses bietet Standartmäßig aber nur den Download der CSV Datei nach Konvertierung an, ich würde gerne den Inhalt in eine CSV Datei auf dem Webspace speichern.

    Dazu muss jede Zeile, die ja ein Array ist zuerst in einen String gewandelt werden. Mein Ansatz war "implode", das gibt mir aber folgenden Fehler aus:
    PHP-Code:
    Warningimplode(): Invalid arguments passed in C:\xampp\htdocs\benny\xlsx2csv.php on line 246 
    und deswegen steht in meiner Datei hinterher auch nur ganz oft "Array"..

    Mein implode-code:
    PHP-Code:
    $csv "C:\\xampp\\htdocs\\benny\\cell-".date('Y-m-d_G-i').".csv";
    $csv4 implode(","$csv);
    file_put_contents($csv4$cell."\n"FILE_APPEND LOCK_EX);; 
    Wie kann man das sonst umsetzen?
    Liebe Grüße,
    .PolluX

  • #2
    Wie stellst du dir das vor? Weder der Beistrich noch der Dateiname ist ein Array. Daher hat implode() auch ungültige Argumente.

    Wenn du die Datei in $csv einlesen möchtest musst du das eben auch tun. (z.B. mit file() oder file_get_contents() oder CSV-Funktionen, je nachdem). Alleine mit dem Dateinamen fängst du natürlich nichts an.

    Kommentar


    • #3
      Zitat von .PolluX Beitrag anzeigen
      Dazu muss jede Zeile, die ja ein Array ist
      Ist sie nicht. Ein var_dump($csv) zeigt dir, daß du bereits ein String vorliegen hast.

      Kommentar


      • #4
        PHP-Code:
        $csv 
        ist hier aber der Dateiname der abgespeicherten Datei.
        Der Inhalt ist
        PHP-Code:
        $cell 
        PHP-Code:
        foreach($cells as $cell){

        if(
        array_key_exists('v',$cell['children'])){

        $cellno str_replace($nums,"",$cell['attributes']['r']);

        for(
        $col $colAlpha$col != $cellno$col++) {
         
        $thisrow[]=" ";
         
        $colAlpha++; 
           };

          if(
        array_key_exists('t',$cell['attributes'])&&$cell['attributes']['t']='s'){
            
        $val $cell['children']['v'][0]['text'];
            
        $string $strings[$val] ;
            
        $thisrow[]=$string;
              } 
            else {
            
        $thisrow[]=$cell['children']['v'][0]['text'];
              }
            }
            else {
        $thisrow[]="";};
            
        $colAlpha++;
            
            
        file_put_contents($csv4$cell."\n"FILE_APPEND LOCK_EX);;
            
            
          }; 

        Kommentar


        • #5
          $csv
          ist hier aber der Dateiname der abgespeicherten Datei.
          Eben:

          Zitat von jspit Beitrag anzeigen
          Ein var_dump($csv) zeigt dir, daß du bereits ein String vorliegen hast.
          Du solltest nicht den String mit dem Pfad/Dateinamen imploden sondern das Array.
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            ach man, jetzt seh ich das erst, dass ich den Dateinamen imploden will
            mensch bin ich dämlich (blind)

            da muss natürlich anstelle von
            PHP-Code:
            $csv "C:\\xampp\\htdocs\\benny\\cell-".date('Y-m-d_G-i').".csv";
            $csv4 implode(","$csv);
            file_put_contents($csv4$cell."\n"FILE_APPEND LOCK_EX);; 
            das hier hin:
            PHP-Code:
            $csv4 "C:\\xampp\\htdocs\\benny\\cell-".date('Y-m-d_G-i').".csv";
            $cell_imploded implode(",",$cell);
            file_put_contents($csv4$cell_imploded."\n"FILE_APPEND LOCK_EX);; 
            also zumindest so in etwa

            Kommentar


            • #7
              PHP-Code:
              $csv4 "C:\\xampp\\htdocs\\benny\\cell-".date('Y-m-d_G-i').".csv";
              $cell_imploded implode(",",$cell);
              file_put_contents($csv4$cell_imploded."\n"FILE_APPEND LOCK_EX);; 


              Testest Du Deine Versuche auch oder läßt Du das hier testen?!
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                ich hab erst den Beitrag verfasst und dann getestet.

                Ergo: Erst testen, dann posten.

                PHP-Code:
                Notice: Array to string conversion in C:\xampp\htdocs\benny\xlsx2csv.php on line 249 
                Und in meiner Datei steht jetzt anstelle einmal Array pro Zeile nur ,Array,Array

                Kommentar


                • #9
                  $cell ist ein mehrdimensionales Array, da ist implode keine gute Idee
                  Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                  Kommentar


                  • #10
                    was könntest du mir denn da empfehlen?

                    Kommentar


                    • #11
                      zB Google, das hat sicher schonmal jemand vor dir benötigt -> https://www.google.at/search?q=php+implode+recursive
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von .PolluX Beitrag anzeigen
                        was könntest du mir denn da empfehlen?
                        google

                        https://www.google.de/?gws_rd=ssl#q=...ensional+array
                        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                        Kommentar


                        • #13
                          Vielen Dank für die Google-Links, aber ich hätte mich wohl deutlicher ausdrücken sollen.

                          Ich meinte eigentlich, ob ihr eine Funktion kennt, die das übernimmt die PHP von Haus aus besitzt.. ^.^

                          Kommentar


                          • #14
                            Kopfschüttel
                            Warum nutzt du nicht google, dann bräuchtest du hier nicht fragen! Wenn es ein Funktion gäbe, hätte man sie dir vermutlich genannt!

                            Ungetestet:
                            PHP-Code:
                            function array_to_string($data$delimiter1=","$delimiter2="|")
                            {
                               
                            $result "";
                               
                               
                            $foreach($data as $value)
                               {
                                  if (
                            is_array($value))
                                  {
                                    if (
                            $result != "")
                                      
                            $result .= $delimiter2 array_to_string($value$delimiter1$delimiter2);
                                    else
                                      
                            $result .= array_to_string($value$delimiter1$delimiter2);
                                  }
                                  else
                                    
                            $result .= implode($delimiter1$value);
                               }
                               
                               return 
                            $result;

                            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                            Kommentar


                            • #15
                              Nach nochmaligem Lesens des Eingangsposts bin ich eigentlich noch verwirrter. Was hast du eigentlich vor?

                              Zitat von .PolluX Beitrag anzeigen
                              Dieses bietet Standartmäßig aber nur den Download der CSV Datei nach Konvertierung an, ich würde gerne den Inhalt in eine CSV Datei auf dem Webspace speichern.
                              Das stimmt nämlich nicht. Lediglich in der Demo wird da irgendein Download gemacht. Standardmäßig, wie auch in der Demo, wird die CSV eh in eine lokale Datei gespeichert. Oder was meinst du mit "Inhalt der CSV"?

                              Kommentar

                              Lädt...
                              X