Ankündigung

Einklappen
Keine Ankündigung bisher.

Variable in Array übernehmen

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

  • Variable in Array übernehmen

    Hallo zusammen

    Ich habe in einer Funktion folgendes:

    Code:
    $ersetzen = array(
       'Begriff' => '<a href"#" class="tooltips"alt="">Begriff<span>Begriff</span></a>',
       'Glossar' => '<a href"#" class="tooltips"alt="">Glossar<span>Glossar</span></a>',
       'Tabelle' => '<a href"#" class="tooltips"alt="">Tabelle<span>Tabelle</span></a>',
       'SQL' => '<a href"#" class="tooltips"alt="">SQL<span>SQL</span></a>',
       'Test mit 2 Zeilen' => '<a href"#" class="tooltips"alt="">Test mit 2 Zeilen<span>Test mit 2 Zeilen</span></a>',
    ); 
    $wort = str_replace(array_keys($ersetzen), $ersetzen, $wort);
    return $wort;
    Damit erreiche ich, dass die Begriffe im Array im Text auf der Webseite in entsprechende Links umgewandelt werden. Das funktioniert so einwandfrei. Nun will ich aber nicht die Begriffe da von Hand rein tippen, sondern aus einer Datenbank übernehmen. In der Variablen $ausgabe habe ich den Text genau so wie er ins Array rein muss. So wie ich es aber jetzt umgesetzt habe, führt das zu einem Parsingfehler.

    Code:
    $ersetzen = array(
       return $ausgabe;
    ); 
    $wort = str_replace(array_keys($ersetzen), $ersetzen, $wort);
    return $wort;
    global $ausgabe hilft auch nicht. Was muss ich anstellen, dass ich die Variable die ausserhalb vom Array generiert wird, ins Array übernommen werden kann?

    Besten Dank, Gruß René


  • #2
    Hole es direkt in diesem Format aus der Datenbank mit PDO::FETCH_KEY_PAIR

    PHP-Code:
    $stmt $pdo->prepare('select search, replace from your_table');
    $stmt->execute();
    $result $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
    var_dump($result); 

    Kommentar


    • #3
      Danke Dir, aber da blicke ich überhaupt nicht durch, was ich jetzt versucht habe funktioniert genau so wenig.

      In der Variablen, $ausgabe ist exakt der Text drin, der funktioniert, wenn ich ihn direkt ohne Variable rein kopieren. Der kommt aber nicht so aus der Datenbank. Da sind nur Begriffe und Beschreibung drin, das HTML wird in einer Schleife drum rum gepackt, bis ich alle Zeilen habe.

      Kommentar


      • #4
        Zeige mal dein Array welches du mit fetchAll aus der Datenbank holst. Das was Meister1900 schreibt spart dir eine Umformung. Wir gehen davon aus du nutzt PDO.
        Deine DB-Resultate bzw. das Array müssen vom Grundsatz an deine Funktion als Parameter übergeben werden.
        PHP-Klassen auf github

        Kommentar


        • #5
          Das ist die komplette Funktion.

          Code:
          function rad_glossar_frontend($wort){
              global $wpdb;
              // Alle Begriffe laden
              $sql = $wpdb->get_results("SELECT glossar_ID, glossar_term, glossar_description FROM ".$wpdb->prefix."rad_glossar");
          
              $ausgabe = "";
              foreach($sql as $result)
                  {
                    // Generiert die Zeilen für das Array
                    $ausgabe .= "'".$result->glossar_term."'";
                    $ausgabe .= " => ";
                    $ausgabe .= "&apos;&lt;a href&quot;#&quot; ";
                    $ausgabe .= "class=&quot;tooltips&quot;";
                    $ausgabe .= "alt=&quot;&quot;&gt;";
                    $ausgabe .= $result->glossar_term;
                    $ausgabe .= "&lt;span&gt;".$result->glossar_term."&lt;/span&gt;";
                    $ausgabe .= "&lt;/a&gt;&apos;,<br />";
                   }
          
              $ersetzen = array(
                  // Zu ersetzendes Wort => Neuer Text
                  return $ausgabe; 
              ); 
              $wort = str_replace(array_keys($ersetzen), $ersetzen, $wort);
              return $wort;
          }
          
          // WP-Filter für den Inhalt und den Exerpt (Inhalts-Auszug)
          add_filter('the_content', 'rad_glossar_frontend');
          add_filter('the_excerpt', 'rad_glossar_frontend');
          // --- END Funktion

          Kommentar


          • #6
            PHP-Code:
                foreach($sql as $result) {
                  
            $ausgabe "&apos;&lt;a href&quot;#&quot; ";
                  
            $ausgabe .= "class=&quot;tooltips&quot;";
                  
            $ausgabe .= "alt=&quot;&quot;&gt;";
                  
            $ausgabe .= $result->glossar_term;
                  
            $ausgabe .= "&lt;span&gt;".$result->glossar_term."&lt;/span&gt;";
                  
            $ausgabe .= "&lt;/a&gt;&apos;,<br />";
                  
            $ersetzen[$result->glossar_term] = $ausgabe;
                } 

            Kommentar


            • #7
              Funktioniert nicht, php passt weiterhin das return im Array nicht

              Parse-Fehler : Syntaxfehler, unerwarteter 'return' (T_RETURN), erwartet ')'

              Kommentar


              • #8
                In meinem Beispiel ist kein return.
                Das musst du bei dir rausnehmen.

                Kommentar


                • #9
                  Ach so, das Array ganz raus nehmen, das macht dann aus

                  Ein kleiner Funktionstest:

                  Lorem ipsum dolor. Der Begriff im Glossar ist eine SQL Tabelle. df5s4ghjt7fg.
                  das da

                  Ein kleiner Funktionstest:

                  Lorem ipsum dolor. Der '<a href"#" class="tooltips"alt="">Begriff<span>Begriff</span></a>',
                  im '<a href"#" class="tooltips"alt="">Glossar<span>Glossar</span></a>',
                  ist eine '<a href"#" class="tooltips"alt="">SQL<span>SQL</span></a>',
                  '<a href"#" class="tooltips"alt="">Tabelle<span>Tabelle</span></a>',
                  . '<a href"#" class="tooltips"alt="">df5s4ghjt7fg<span>df5s4ghjt 7fg</span></a>',

                  Kommentar


                  • #10
                    Vielen Dank allen die versucht haben mir zu helfen. Aber das funktioniert so alles nicht. Es müssen einfach nur mehrere Zeilen HTML in das Array rein. Da macht es aus meiner Sicht überhaupt keinen Sinn was an den Abfragen zu ändern, die funktionieren einwandfrei. Genau so wie das generierte HTML, wenn ich es statisch rein schreibe. Ich will aber nicht nach jeder Änderung in der DB diesen Code manuell in die Funktion rein kopieren.

                    Ich muss da nach einer anderen Lösung suchen. Arrays sind nicht meine Stärke, da muss ich mal ein paar Tests anstellen um das Ganze besser zu verstehen. Meine Überlegung geht in die Richtung, statt zeilenweise die Variable $ausgabe zu füllen, zeilenweise ins Array zu schreiben.

                    Kommentar


                    • #11
                      Zitat von radarin Beitrag anzeigen
                      Meine Überlegung geht in die Richtung, statt zeilenweise die Variable $ausgabe zu füllen, zeilenweise ins Array zu schreiben.
                      Genau das passiert in #6 mit
                      PHP-Code:
                      $ersetzen[$result->glossar_term] = $ausgabe
                      Dies baut das Array so auf wie in #1

                      Kommentar


                      • #12
                        #6 hat bei mir nicht funktioniert. Dann wird der Fehler bei der Übergabe ins str_replace() sein. Muss ich mir nochmals genauer ansehen. Danke.

                        Kommentar


                        • #13
                          Ich verstehe eigentlich nicht 100%, was Du da machen willst. Vlt. kannst Du das mal ohne Code und ohne das, was Dich Deiner Meinung nach codeseitig hemmt, in einfachen Worten beschreiben. Mein Bauchgefühl sagt mir, Du bist Anfänger und denkst da etwas schräg.

                          Es ist schon alles gesagt. Nur noch nicht von allen.

                          Kommentar


                          • #14
                            Ok, das foreach in #6 ist vom Prinzip her richtig. Aber nicht mit den von mir eingesetzten Ersatzzeichen. Die haben zwar exakt den Text ausgegeben, der im Array stehen müsste, aber jetzt hatte es zur Folge, dass der Text auch so nach dem Ersetzen angezeigt wird. Ich habe also wieder alles als HTML eingefügt. Jetzt funktioniert es.

                            glossar_term im span musste noch gegen glossar_description ersetzt werden, und das <br> konnte auch noch raus.

                            Vielen Dank für die Hilfe!

                            Kommentar


                            • #15
                              @drsoong
                              Dieses Array statt manuell aus einer DB füllen. Mit Arrays komme ich nur sehr selten in Berührung.

                              PHP-Code:
                              $ersetzen = array(
                                      
                              // Zu ersetzendes Wort => Neuer Text
                                      
                              'Lorem' => '<a href="#">Lorem</a>',
                                      
                              'ipsum' => '<a href="#">ipsum</a>',
                                      
                              'dolor' => '<a href="#">dolor</a>',   
                                  ); 

                              Kommentar

                              Lädt...
                              X