Ankündigung

Einklappen
Keine Ankündigung bisher.

Assoziatives Array mit String initialisieren

Einklappen

Neue Werbung 2019

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

  • Assoziatives Array mit String initialisieren

    Hallo,

    ich würde gerne ein assoziatives Array mit folgendem String initialisieren:
    $teststring = '"forename" => "Martin", "surname" => "Mustermann", "age" => "20", "birthdate" => "11.12.1984"';
    $testarray = array($teststring);

    Allerdings liefert mir dieses Vorgehen statt einem Array mit den Identifiern forename, surname, age und birthdate ein Array mit dem Identifier 0 und dem String als Wert.
    Gibt es dazu eine Lösung?

    Ich würde das gerne verwenden, da ich einer DB-Tabelle aufbereitet Strings wie oben den teststring speichern möchte und diese dann bequem in ein Array zur Weiterverarbeitung umwandeln kann. Gibt es dafür eine bessere Lösung (ich verwende PostgreSQL als DB).

    Danke für eventuelle Infos

  • #2
    Der array-Operator erwartet nunmal nicht einen einzelnen String, sondern mehrere Strings, die durch => und Komma getrennt sind.

    Um aus einem solchen String die Einzelteile zu entnehmen wirst Du wohl mit preg_match nach den Schlüssel-Wert-Paaren suchen müssen.
    **********************************
    Nein, ich bin nicht die Signatur.
    Ich putze hier nur.
    **********************************

    Kommentar


    • #3
      Mir viel grad nichts anders dazu ein:
      PHP-Code:
      <?php
      error_reporting
      (E_ALL);

      $teststring '"forename" => "Martin", "surname" => "Mustermann", "age" => "20", "birthdate" => "11.12.1984"';

      $temp explode(','$teststring);

      foreach( 
      $temp as $v) {
      $ex explode('=>'$v);
      $testarray[trim($ex[0],' |"')] = trim($ex[1],' |"');
      }

      echo 
      '<pre>'print_r($testarraytrue), '</pre>';

      ?>

      Kommentar


      • #4
        Das klappt aber nicht, wenn da mal ein Komma in einem der Werte steckt.
        Vielleicht vällt Dir ja noch was anderes ein.
        **********************************
        Nein, ich bin nicht die Signatur.
        Ich putze hier nur.
        **********************************

        Kommentar


        • #5
          Pffffffff, müsste ich jetzt Überlegen, keine Lust ...

          Kommentar


          • #6
            Ok, 2. Versuch:
            PHP-Code:
            <?php
            error_reporting
            (E_ALL);

            $teststring '"forename,uhu" => "Martin" , "surname" => "Mustermann", "age" => "20", "birthdate" => "11.12.1984"'

            $temp preg_split('#(?<= |"),#'$teststring); 

            foreach( 
            $temp as $v) { 
            $ex explode('=>'$v); 
            $testarray[trim($ex[0],' |"')] = trim($ex[1],' |"'); 


            echo 
            '<pre>'print_r($testarraytrue), '</pre>';
            EDIT:

            3. Versuch, wenn im Wert ein Komma oder => vorkommt:

            PHP-Code:
            error_reporting(E_ALL);

            $teststring '"forename,uhu" => "Martin" , "sur => name" => "Mustermann", "age" => "20", "birthdate" => "11.12.1984"'

            $temp preg_split('#(?<= |"),#'$teststring); 

            foreach( 
            $temp as $v) {
              
            preg_match_all('#(\'|\")(.*)\1#U'$v$ex);
              
            $testarraytrim($ex[0][0], ' |"') ] = trim($ex[0][1], ' |"');
            }

            echo 
            '<pre>'print_r($testarraytrue), '</pre>'
            ... nu ist aber gut ...

            Kommentar


            • #7
              jetzt mal ganz bloed gefragt -
              geht es nicht auch so:
              PHP-Code:
              $teststring '"forename" => "Martin", "surname" => "Mustermann", "age" => "20", "birthdate" => "11.12.1984"';
              eval(
              '$testarray = array(' $teststring ');'

              Kommentar


              • #8
                jetzt mal ganz bloed gefragt -
                geht es nicht auch so:
                Blöde Frage, einfach selber mal ausprobieren !

                Kommentar


                • #9
                  Danke für die zahlreichen Antworten.
                  Ich werde mir die Lösungswege mal anschauen und dann berichten, ob es funktioniert.

                  Schönen Tag noch

                  Kommentar


                  • #10
                    Ich würde das gerne verwenden, da ich einer DB-Tabelle aufbereitet Strings wie oben den teststring speichern möchte und diese dann bequem in ein Array zur Weiterverarbeitung umwandeln kann. Gibt es dafür eine bessere Lösung (ich verwende PostgreSQL als DB).
                    http://php.net/serialize
                    Oder eine Tabelle (id,array_id,array_key,array_value) verwenden.

                    Kommentar


                    • #11
                      Danke für alle Vorschläge.

                      Ich habe jetzt die eval()-Funktion im Einsatz und bin damit recht glücklich.
                      So funktioniert es:

                      $teststring = '"forename" => "Martin", "surname" => "Mustermann", "age" => "20", "birthdate" => "11.12.1984"';
                      eval("\$testarray = array($teststring);");
                      //Kontrolle
                      print_r($testarray);

                      MfG

                      Kommentar

                      Lädt...
                      X