Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrfache Values zu einem Key aus zwei Arrays

Einklappen

Neue Werbung 2019

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

  • Mehrfache Values zu einem Key aus zwei Arrays

    Hallo zusammen,

    ich würde gerne 2 Arrays mit array_combine zusammenfügen, damit die Werte in Array1 meine Keys ergeben und die Werte in Array2 meine Values ergeben.
    Die Werte stammen aus einer .yml-Datei die jeweils eine componentgroup als Key und einen componentname als Value haben.
    PHP-Code:
            $yamlKeys = array();
            foreach (
    $yaml['components'] as $yamlComponent) {
                
    array_push($yamlKeys$yamlComponent['cachet']['componentgroup']);
            }

            
    $yamlValues = array();
            foreach (
    $yaml['components'] as $yamlComponent) {
                
    array_push($yamlValues$yamlComponent['cachet']['componentname']);
            }

            
    $yamlMap = array();
            
    $yamlMap array_combine($yamlKeys$yamlValues);

            echo(
    "===== YAML MAP STARTS =====");
            
    var_dump($yamlMap);
            echo(
    "===== YAML MAP ENDS ====="); 
    Nun hab ich das Problem, dass in $yamlKeys gleiche Werte vorkommen können.
    In $yamlMap wird dann jedoch nur ein Value (nämlich der letzte) diesem Key zugewiesen.

    Zur Veranschaulichung:
    In der yaml-Datei sieht es so aus:

    PHP-Code:
    FOO => BAR
    Key1 
    => Value1
    Key2 
    => Value2
    FOO 
    => BAZ
    Key3 
    => Value3 
    Mein Code macht das:

    PHP-Code:
    FOO => BAZ
    Key1 
    => Value1
    Key2 
    => Value2
    Key3 
    => Value3 
    Ich will aber, dass er das macht:

    PHP-Code:
    FOO => BARBAZ
    Key1 
    => Value1
    Key2 
    => Value2
    Key3 
    => Value3 
    Ist das überhaupt möglich? Falls ja, kann mir jemand auf die Sprünge helfen?

  • #2
    Zitat von JuriW Beitrag anzeigen
    Ist das überhaupt möglich?
    Ja, aber nicht mit array_combine().

    Zitat von JuriW Beitrag anzeigen
    Falls ja, kann mir jemand auf die Sprünge helfen?
    foreach() oder array_reduce() mit array_key_exists().

    Kommentar


    • #3
      Hallo, danke für die schnelle Antwort

      habs jetzt so probiert
      PHP-Code:
      $count 0;
      foreach (
      $yamlKeys as $yamlKey) {
          
      $yamlMap[$yamlKey] = $yamlValues[$count];
          
      $count++;

      Leider ist das Ergebnis das gleiche. (Also, dass nur der letzte Wert dem Key zugewiesen wird) Wo hab ich meinen Denkfehler?

      Kommentar


      • #4
        Leider ist das Ergebnis das gleiche.
        Der Code macht ja auch genau das Gleiche wie array_combine(). Daher kommt auch das Gleiche raus.

        Deswegen ja auch der Hinweis auf array_key_exists().

        Kommentar


        • #5
          Zitat von JuriW Beitrag anzeigen
          Wo hab ich meinen Denkfehler?
          Du darfst nur zuweisen wenn der Schlüssel noch nicht vorhanden ist. Im anderen Fall möchtest du den Wert ja wohl mit Komma getrennt anhängen ( BAR, BAZ ).

          Kommentar


          • #6
            Habe zwar keinen blassen Schimmer was das soll..... ???

            Sinnig wäre die "Beförderung" von Foo zum Array.....

            aber um beim Lösungsansatz von #3 zu bleiben

            PHP-Code:

            $myKeys 
            = ["Foo""key1""Foo""key2""key3"];
            $myValues = ["BAR""Val1""BAZ""Val2""Val3"];
            foreach (
            $myKeys as $key => $myKey)
                
            $myMap[$myKey] = !isset($myMap[$myKey]) ? $myValues[$key]: $myMap[$myKey].', '.$myValues[$key];


            var_dump($myMap); 
            Als Array...
            PHP-Code:
            $myKeys = ["Foo""key1""Foo""key2""key3"];
            $myValues = ["BAR""Val1""BAZ""Val2""Val3"];
            foreach (
            $myKeys as $key => $myKey$myMap[$myKey][] = $myValues[$key];
            var_dump($myMap); 
            /*
            array (size=4)
              'Foo' => 
                array (size=2)
                  0 => string 'BAR' (length=3)
                  1 => string 'BAZ' (length=3)
              'key1' => 
                array (size=1)
                  0 => string 'Val1' (length=4)
              'key2' => 
                array (size=1)
                  0 => string 'Val2' (length=4)
              'key3' => 
                array (size=1)
                  0 => string 'Val3' (length=4)
            */ 

            Kommentar

            Lädt...
            X