Ankündigung

Einklappen
Keine Ankündigung bisher.

Array Problem

Einklappen

Neue Werbung 2019

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

  • Array Problem

    Moin,

    ich bin eine ziemliche Anfängerin in PHP und hänge jetzt schon seit einiger Zeit an einem Problem zum befüllen eines Arrays fest.

    Die Ausgangslage ist folgende:

    Ich definiere ein Array:

    PHP-Code:
    $server_db = ('datenbank1' => 'Servername1''datenbank2' => 'Servername2'
    und lese das dann in einer foreach-Schleife aus:
    PHP-Code:
    foreach($server_db as $db_name => $servname){
        print 
    '<p>';
         print 
    'Datenbank: ' $db_name .'<br>';
         print 
    'Server: ' $servname;
        print 
    '</p>';

    Funktioniert wunderbar und die Ausgabe ist genau so, wie ich sie haben möchte.

    Ich will die Daten des Arrays aber nicht hart codiert im Quelltext stehen haben, sondern möchte die aus einer Datenbank auslesen. Der String steht so in der DB:
    PHP-Code:
    'datenbank1' => 'Servername1''datenbank2' => 'Servername2' 
    Wenn ich das Feld auslese und in ein Array packe,
    PHP-Code:
    $test = array($opt['server_db']); 
    ist das Ergebnis aber leider nicht so wie gewünscht, sondern über die Schleife

    PHP-Code:
    foreach($test as $db_name => $servname){
        print 
    '<p>';
         print 
    'Datenbank: ' $db_name .'<br>';
         print 
    'Server: ' $servname;
        print 
    '</p>';


    bekomme ich nur einen einzelnen Datensatz

    Code:
    Datenbank: 0
    Server: 'datenbank1' => 'Servername1', 'datenbank2' => 'Servername2'
    statt

    Code:
    Datenbank: datenbank1
    Server: Servername1
    
    Datenbank: datenbank2
    Server: Servername2
    Wie umgehe ich das Problem, dass hier automatisch ein index gesetzt wird?
    Ich bin hier schon am verzweifeln! Ich hoffe, mir kann jemand helfen!

    Anja-Kristina


  • #2
    PHP-Code:
    $test = array($opt['server_db']); 
    ist in diesem Falle gleich zu setzen mit

    PHP-Code:
    $test = array("'datenbank1' => 'Servername1', 'datenbank2' => 'Servername2' "); 
    da der Zelleninhalt als ein einzelner String 'geladen' wird, was im grunde dann Folgendes Array erzeugt:

    PHP-Code:
    $test[0] = " 'datenbank1' => 'Servername1', 'datenbank2' => 'Servername2' "
    sieh' dir evtl mal [MAN]serialize[/MAN] bzw. [MAN]unserialize[/MAN] an.

    Kommentar


    • #3
      Ich se da nicht, wo du $test als Array definierst und mehrere Elemente hinzufügst, so wie es bei dir steht (ohne die Schleife zu kennen), überschreibst du $test immer wieder. Arrayelemente kannst du mit dem []-Operator hinzufügen

      Code:
      $test[] = array( $db_name, $servername );
      You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

      Kommentar


      • #4
        Zitat von surabaja Beitrag anzeigen
        PHP-Code:
        $server_db = ('datenbank1' => 'Servername1''datenbank2' => 'Servername2'
        Hmm, da fehlt das array-Keyword aber das hast du anscheinend nur vergessen mitzukopieren.
        Zitat von surabaja Beitrag anzeigen
        Ich will die Daten des Arrays aber nicht hart codiert im Quelltext stehen haben, sondern möchte die aus einer Datenbank auslesen. Der String steht so in der DB:
        PHP-Code:
        'datenbank1' => 'Servername1''datenbank2' => 'Servername2' 
        Ganz schlechte Idee. Wenn du das Array unbedingt als String in der DB speichern willst, benutze die PHP-Funktionen [man]serialize[/man] und [man]unserialize[/man] aber so etwas sollte man gar nicht erst tun. Wenn es dir möglich ist, ändere lieber dein Datenbank-Design (Stichwort: [WIKI]Normalisierung[/WIKI])
        @fschmengler - @fschmengler - @schmengler
        PHP Blog - Magento Entwicklung - CSS Ribbon Generator

        Kommentar


        • #5
          Wie shcon von DarkWarrior angemerkt erzeugst du mit dem String aus der Datenbank ein Array mit eben diesem String als ein Element.

          Ich würde auch zu serialize() raten wenn du Array-Strukturen persistent speichern möchtest.

          Alternativ kannst du mit explode() einen String anhand einer Trennzeichenkette in Array teilen.

          PHP-Code:
          $array explode(', '"'datenbank1' => 'Servername1', 'datenbank2' => 'Servername2' ");

          //ergibt:
          $array[0] = "'datenbank1' => 'Servername1'";
          $array[1] = "'datenbank2' => 'Servername2'"
          Das Ergebnis könnt eman wieder mit explode() nach " => " zerlegen und mit trim() die ' entfernen... aber das ist alles für so eine Kleinigkeit SEHR umständlich.

          Wieos liegt das so in der Datenbank? Warum hast du nicht eine Datenbanktabelle mit den Spalten "datenbank" und "server" und liest einfach alle Zeilen aus?
          "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

          Kommentar


          • #6
            Grundsätzlich würd' ich in diesem Fall auch nicht zum Speichern in einer Datenbank raten - in einer Konfigurationsdatei, die du überall, wos benötigt wird, includest, wär' das Array besser aufgehoben mMn.

            Da es sich dabei lediglich um key/value-päärchen handet, lässt sich das auch per Hand recht übersichtlich konfigurieren.

            Mal ganz abgesehen davon, dass Datenbankzugriff & Bearbeitung des Strings in diesem Fall mehr Zeit beansprucht, als das includen einer Datei, wo das Array fix drinnen steht.

            Kommentar

            Lädt...
            X