Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrsprachige Website: Arrays verbinden

Einklappen

Neue Werbung 2019

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

  • Mehrsprachige Website: Arrays verbinden

    Guten morgen zusammen.

    Ich versuch derzeit meine Website so zu gestalten, das sie mehrsprachig angezeigt werden kann. Damit die Seite weiß, welche Sprache der Benutzer haben möchte, lass ich ein Cookie anlegen der den Inhalt der Sprache übermittelt und in der Variable $language speichert. Den Text für die Website speicher ich in der Datenbank (Aufbau der Datenbank siehe Bild1). Nun versuche ich das er den Inhalt von Schlüssel ([name]) zusammen mit dem Text in einem Array abspeichert. Soweit klappt das auch (Code bei Beispiel 1). Nun hab ich aber das Problem, das er für jeden Eintrag einen eigenen Array erzeugt (siehe Bild 2), ich möchte allerdings das er das in einem Array packt (siehe Bild 3). Versucht hab ich es schon mit array_combine und array_merge bzw array_merge_recursive bin aber nicht zum gewünschten Ergebnis gekommen.


    Bild 1: Aufbau der Datenbank:



    Beispiel 1:
    PHP-Code:
    <?php
    $languageStmt 
    "SELECT `id`, `name`, `".$language."` FROM `language` ORDER BY `id`";
    foreach(
    $pdo->query($languageStmt) as $languageDB) {
        
        
    $output array_slice($languageDB, -31);
        
    $output2 array_slice($languageDB, -21);
        
        
    $test array_combine($output$output2);
        
        
    print_r('<pre>');
        
    print_r($test );
        
    print_r('</pre>');

    }
    ?>
    Bild 2: Ausgabe im Browser:



    Bild 3: So würd ich es gerne haben:



  • #2
    Dann greif halt auf die Elemente direkt zu (array_slice ist totaler Quatsch hier) und weise diese direct dem Ausgabe Array zu. Das sind Grundlagen zum Arbeiten mit Arrays!

    Kommentar


    • #3
      Das Datenbankdesign ist schlecht. Mach nicht pro Sprache eine Spalte, sondern eine Zeile. Ansonsten ist es sehr statisch und unflexibel.

      Kommentar


      • #4
        Zitat von Ulfikado Beitrag anzeigen
        Dann greif halt auf die Elemente direkt zu (array_slice ist totaler Quatsch hier) und weise diese direct dem Ausgabe Array zu. Das sind Grundlagen zum Arbeiten mit Arrays!
        Hab jetzt noch mal rumgefummelt und dabei dein Ratschlag befolgt.

        PHP-Code:
        <?php

        $languageDB
        = array();
        $languageStmt "SELECT `key`, `content` FROM `language_".$language."` ORDER BY `id`";
        foreach(
        $pdo->query($languageStmt) as $row) {
            
        $languageDB[$row[0]] = $row[1];
        }

        ?>
        So funktioniert die Ausgabe und sieht genau so aus wie ich das haben wollte, hätt man das noch anders lösen können ? ^^

        Zitat von hellbringer Beitrag anzeigen
        Das Datenbankdesign ist schlecht. Mach nicht pro Sprache eine Spalte, sondern eine Zeile. Ansonsten ist es sehr statisch und unflexibel.
        Aber wie soll er dann Wissen, welche Sprache er anzeigen soll ? Er braucht ja eine Spalte die sagt, zu welcher Sprache der Text gehört

        Kommentar


        • #5
          Zitat von Lariphos Beitrag anzeigen
          Aber wie soll er dann Wissen, welche Sprache er anzeigen soll ? Er braucht ja eine Spalte die sagt, zu welcher Sprache der Text gehört
          Richtig, eine Spalte. Du legst aber für jede Sprache eine zusätzliche Spalte an.

          Und pro Sprache eine Tabelle ist auch Quatsch.

          Kommentar


          • #6
            Aber wie er dann wissen, welche Sprache er anzeigen soll ? Er braucht ja eine Spalte die sagt, zu welcher Sprache die Zeile gehört
            zB
            Code:
            id | lang | name | text
            23 | de | siteTitle | Seitentitel auf deutsch
            24 | en | siteTitle | Pagetitle in english
            id ist der Primary und dann noch einen UNIQUE auf lang und name.

            Wobei man da auch noch weiter normalisieren könnte, aber ...

            Kommentar


            • #7
              Zitat von hellbringer Beitrag anzeigen

              Richtig, eine Spalte. Du legst aber für jede Sprache eine zusätzliche Spalte an.

              Und pro Sprache eine Tabelle ist auch Quatsch.
              Also quasi so ?



              Zitat von hausl Beitrag anzeigen

              zB
              Code:
              id | lang | name | text
              23 | de | siteTitle | Seitentitel auf deutsch
              24 | en | siteTitle | Pagetitle in english
              id ist der Primary und dann noch einen UNIQUE auf lang und name.

              Wobei man da auch noch weiter normalisieren könnte, aber ...
              Dann hat ich hellbringer ja richtig verstanden

              Kommentar


              • #8
                Wobei

                Tabelle languages
                Code:
                id | name
                de | Deutsch
                en | English
                fr | Français
                und languages.id der FK zu deinem xxx.language ist

                Kommentar


                • #9
                  Die Id kann man weglassen, da lang und name schon Identity genug sind und somit auch zum PK werden können.

                  Aber ggf braucht man noch eine Spalte als Referenz zum Stammdatensatz.

                  Kommentar


                  • #10
                    Danke für die Tipps, man lernt doch jeden Tag was neues =)

                    Da sich das Thema erlediegt hat, kann es auch von mir aus geschloßen werden.

                    Kommentar

                    Lädt...
                    X