Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Wie mache ich aus einem php multi Array ein js objekt literal?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Wie mache ich aus einem php multi Array ein js objekt literal?

    Hallo zusammen,

    leider habe ich mich bis jetzt nicht object literals auseinandergesetzt.
    Ich habe ein mehrdimensionales Array $kaufhaus['Artikel'][$i], $kaufhaus['bild'][$i], $kaufhaus['ZText'][$i] und $kaufhaus['breite'][$i].

    Damit will ich mit dw_tooltip.js eine JavaScript Objektvariable füllen. Für dw_tooltip muss das Ganze dann so aussehen:
    Code:
    ...
    dw_Tooltip.content_vars = {
    L1: {
    	 caption: ' Dreirad für Kinder bis 6 Jahre', 
    	 img: 'images/Dreirad.gif',
    	 txt: 'praktisches Dreirad mit mit Ladefläche', ,
    	 w: 220
         },
    L2: {
    	 caption: ' Fahrrad für Kinder bis 8 Jahre', 
    	 img: 'images/Fahrrad.gif',
    	 txt:   'Fahrrad in rot 24"',
    	 w: 220
    
          },...
    }
    </script>
    Zunächst habe ich gedacht ich müsste das PHP-Array in JS-Array umwandeln und dann in einer For-Schleife so formatieren, dass dann im Quellcode so dasteht.
    Jetzt habe ich 'ne ganze Menge über Obejekt Literale und Arrays gelesen, krieg es aber einfach nicht umgesetzt.
    Der Ansatz mit aus http://www.php.de/javascript-ajax-un...n-fuellen.html fand ich ganz hilfreich:
    Code:
    var foo = {};
    foo.bla = 5;
    var key = 'bar';
    foo[key] = 6;
    
    /* ergibt
    {
    bla : 5 ,
    bar : 6
    }
    */
    und leuchtet mir ein, aber mir erscheint das ganze sehr viel komplizierter, da ich ja auch die Namen der Eigenschaften (caption,img, ..). mit einbauen muss, Lücken im Array[$i] beachten muss usw.
    $dw = {};
    und dann. Ich kann ja wahrscheinlich nicht mit echo 'L'.$i...; vorgehen und wenn, dann muss ich ja wahrscheinlich $dw .'L'.$i.caption = $kaufhaus['Artikel'][$i]; oder sowas zusammenbasteln.
    und kann ich das dann einfach mit <?php echo in JavaScript ausgeben?
    Wäre für den ein oder anderen Tip dankbar, bevor ich wahnsinnig werde. Hab's jetzt so gelöst. geholfen haben letztendlich https://wiki.php.net/rfc/objectarrayliterals und bedingt auch http://www.phpied.com/javascript-sty...terals-in-php/. Jetzt hab' ich das gemacht:
    PHP-Code:

    for($i=1;$i<=123;$i++) {
      if (isset(
    $kaufhaus['Artikel'][$i])) {
            
    $kaufhaus['Tooltext'][$i] = $kaufhaus['ZText'][$i]!="" $kaufhaus['ZText'][$i]."<br/>".$kaufhaus['ABeschr'][$i] : $kaufhaus['ABeschr'][$i];
        
    $tooltip[$i] = (object)array( "L".$i     => (object)array("caption" => $kaufhaus["Artikel"][$i], "img" => $kaufhaus["Bild"][$i], "txt" => $kaufhaus["Tooltext"][$i], "w" => (int)$kaufhaus["breite"][$i] ),);
       }

    so kriege ich den ganzen summs in die objekt-variable $tooltip. Ich möchte ja in javascript dann einfach:
    Code:
    dw_Tooltip.content_vars =<?php echo serialize(tooltip); ?>;
    schreiben. Kann ich da mit preg_replace arbeiten, um aus:
    [ROTZE]
    a:35:{i:1;O:8:"stdClass":1:{s:2:"L1";O:8:"stdClass ":4:{s:7:"caption";s:108:"Dreirad für Kinder bis 6 Jahre";s:3:"img";s:45:"http://www.php.de/images/Tooltip/Dreirad-rot200_2-w500-h500.jpg";s:3:"txt";s:17:"GS-geprüft";s:1:"w";i:220;}}i:2;O:8:"stdClass":1:{s:2 :"L2";O:8:"stdClass":4:{s:7:"caption";s:108:"Fahrr ad für Kinder bis 8 Jahre";s:3:"img";s:37:"http://www.php.de/images/Tooltip/Fahrrad- rot200_2.jpg";s:3:"txt";s:25:"20&quot, Für Mädchen und Jungs";s:1:"w";i:220;}}i:3;O:8:"stdClass":1:{s:2:" L3";O:8:"stdClass":4:{s:7:"caption";s:108:...
    [/ROTZE]
    sowas
    Code:
    {
    L1: {
    	 caption: ' Dreirad für Kinder bis 6 Jahre', 
    	 img: 'images/Dreirad.gif',
    	 txt: 'praktisches Dreirad mit mit Ladefläche', ,
    	 w: 220
         },
    L2: {
    	 caption: ' Fahrrad für Kinder bis 8 Jahre', 
    	 img: 'images/Fahrrad.gif',
    	 txt:   'Fahrrad in rot 24"',
    	 w: 220
    
          },...
    }
    rauskriege oder gibt es da eine andere empfohlene Vorgehensweise?

    Ääh, kann auch so (und das wird es wahrscheinlich auch) aussehen:
    Code:
    {L1:{"caption":"DreiradfürKinderbis6Jahre","img":"images/Dreirad.gif","txt":"praktischesDreiradmitmitLadefläche",w:220},L2:{"caption":"FahrradfürKinderbis8Jahre","img":"images/Fahrrad.gif","txt":"Fahrradinrot24","w":220},...}
    Danke vorab.


  • #2
    http://de1.php.net/json_encode
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Hallo tkausl,

      hatte ich schon getestet. Kommt aber garnix raus. ich will ja diese ganzen syntaktischen Sachen wie a:35:{i:1;O:8:"stdClass":1 : raushaben. Da muss es doch ein allgemeingültiges Verfahren für geben. preg_replace erscheint mir hier eben auch billig. Finde ich da http://de1.php.net/json_encode nicht oder bin zu blöde.

      Kommentar


      • #4
        Deine "syntaktischen Sachen" wie
        Code:
        a:35:{i:1;O:8:"stdClass":1 :
        sind aus Serialize entstanden. Damit kann JS nichts anfangen, mit JavaScriptObjectNotation schon, daher ist das Serialize unsinnig und sollte durch json_encode ersetzt werden. Dass das Array richtig aufgebaut ist muss natürlich vorher sichergestellt werden.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Hallo tkausl,

          im Prinzip habe ich in dem Objekt was ich brauche. json_encode gibt aber leider ein leeres Objekt zurück.

          Kommentar


          • #6
            Zitat von mafusys Beitrag anzeigen
            Hallo tkausl,

            im Prinzip habe ich in dem Objekt was ich brauche. json_encode gibt aber leider ein leeres Objekt zurück.
            Beispiel?
            http://hallophp.de

            Kommentar


            • #7
              PHP-Code:
              <?php

              $data 
              = array();

              $data['L1'] = array(
                  
              'caption' => 'Dreirad für Kinder bis 6 Jahre',
                  
              'img'     => 'images/Dreirad.gif',
                  
              'txt'     => 'praktisches Dreirad mit mit Ladefläche',
                  
              'w'       => 220
              );

              $data['L2'] = array(
                  
              'caption' => 'Fahrrad für Kinder bis 8 Jahre',
                  
              'img'     => 'images/Fahrrad.gif',
                  
              'txt'     => 'Fahrrad in rot 24"',
                  
              'w'       => 220
              );

              echo 
              json_encode(
                  
              $data,
                  
              JSON_PRETTY_PRINT JSON_UNESCAPED_UNICODE JSON_UNESCAPED_SLASHES
              );

              //{
              //    "L1": {
              //        "caption": "Dreirad für Kinder bis 6 Jahre",
              //        "img": "http://www.php.de/images/Dreirad.gif",
              //        "txt": "praktisches Dreirad mit mit Ladefläche",
              //        "w": 220
              //    },
              //    "L2": {
              //        "caption": "Fahrrad für Kinder bis 8 Jahre",
              //        "img": "http://www.php.de/images/Fahrrad.gif",
              //        "txt": "Fahrrad in rot 24\"",
              //        "w": 220
              //    }
              //}
              Es wäre echt ein Traum, wenn ihr so was in euren Threads mal mehr selbst versuchen würdet, statt nur zu schreiben: „Geht nicht.“

              Kommentar


              • #8
                Hm, das Beispiel hätte ich gerne von mafusys gesehen, merms.
                http://hallophp.de

                Kommentar


                • #9
                  Es wäre echt ein Traum, wenn ihr so was in euren Threads mal mehr selbst versuchen würdet, statt nur zu schreiben: „Geht nicht.“
                  Es wäre auch ein Traum, wenn nicht jeder Dreiradhändler meint, PHP-Entwickler spielen zu müssen. Es dann nicht hinkriegt und hier aufschlägt.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Hallo Zusammen,

                    also erstmal funktioniert das ganze mit preg_replace. Sowas kriegt aber wahrscheinlich auch nicht jeder Dreiradhändler hin.

                    Zum Zweiten: Vielen Dank an mermshaus, der so ein ausführliches Beispiel zeigt. Das werden bestimmt auch viele Leute nach mir hier im Forum finden, hoffe ich zumindest. Ich werde es versuchen so (in einer for-schleife) umzusetzen, da es mir einfach und sauber erscheint. Ich werde mich bei mermshaus zurückmelden, sobald alles funktioniert. Herzlichen Dank dafür. )

                    Kommentar


                    • #11
                      Hallo zusammen,

                      also jetzt funktioniert das sehr gut und ist auch syntaktisch in Ordnung. Mein PHP-Summs, den ich mit preg_replace geschrieben war 4-mal so lang und war eigentlich ebne nicht sauber:
                      PHP-Code:
                      <?php 
                      $tooltip 
                      = array();
                      for(
                      $i=1;$i<=36;$i++) {
                          if (isset(
                      $kaufhaus['Artikel'][$i])) {
                              
                      $kaufhaus['Tooltext'][$i] = $kaufhaus['ZText'][$i]!="" $kaufhaus['ZText'][$i].' '.$kaufhaus['ABeschr'][$i] : $kaufhaus['ABeschr'][$i];
                              
                      $z 'L'.$i;
                              
                      $tooltip[$z] = array(
                                  
                      'caption' => $kaufhaus["Artikel"][$i],
                                  
                      'img'     => $kaufhaus["Bild"][$i],
                                  
                      'txt'     => $kaufhaus["Tooltext"][$i],
                                   
                      'w'       => (int)$kaufhaus["breite"][$i]
                                  );
                              }
                          }
                      ?>
                      Ich hatte ja auch bevor ich hier im Forum gesucht habe über all woanders geschaut (unteranderem auch unter http://de1.php.net/json_encode), aber kein passendes Beispiel gefunden wo die Optionen JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES oder JSON_UNESCAPED_UNICODE verwendet wurden.

                      PHP-Code:
                      <?php 
                      <script type="text/javascript">
                      dw_Tooltip.content_vars = <?php    echo json_encode($tooltipJSON_PRETTY_PRINT JSON_UNESCAPED_UNICODE JSON_UNESCAPED_SLASHES); ?>
                      </script>
                      ?>
                      Es wäre echt ein Traum, wenn ihr so was in euren Threads mal mehr selbst versuchen würdet, statt nur zu schreiben: „Geht nicht.“
                      Danke nochmal mermshaus. Ich bin gewiss, dass sich auch Deine Träume erfüllen werden. Manchmal kommt man eben in bestimmte Themen schlecht rein und dann kann so ein Forum wirklich helfen
                      Bis dann

                      Kommentar


                      • #12
                        Ja, passt schon. Ich hatte ehrlich gesagt ein wenig was überlesen, was du zu der Funktion schon gesagt hattest, und heute ist leider generell ein Tag mit seeehr seichter Postqualität (Leute begreifen kaum, dass ein String kein Integer ist und so), und ich habe mich gerade einige Zeit mit dem Trainwreck-Code von GeSHi rumgeschlagen… (Wer nur Zeit für eine Methode hat, soll sich parse_code ansehen. ) Habe da auch schon mal einen Bug eingereicht, aber ich kann es dem Maintainer nicht verdenken, dass da nichts angefasst wird, wenn es nicht unbedingt sein muss. Die (zyklomatische) Komplexität ist zu krass.

                        BTT: Trotzdem ist es immer cool, wenn man als Helfer testbare Beispiele sieht, also wenn du hier zum Beispiel $kaufhaus mit irgendwelchen Demowerten initialisiert hättest. Die JSON-Flags dürften auch eigentlich nur Kosmetik sein.


                        PS:

                        Code:
                        * This should only be called ONCE, cos it's SLOW! If you want to highlight
                        * the same source multiple times, you're better off doing a whole lot of
                        * str_replaces to replace the &lt;span&gt;s
                        I don’t even…

                        Kommentar


                        • #13
                          Vielleicht sollte man mal paar alte Zöpfe abschneiden.
                          if (GESHI_PHP_PRE_433) {
                          soll sich parse_code ansehen
                          Boah, wie ätzend. Das wäre ja genug Code für ne eigene Klasse.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar

                          Lädt...
                          X