Mario: 2 Arrays zu einem verbinden array1= key array2=wert

Hi,

möchte ein Array mit einem anderen Array vergleichen und ein neues Array erstellen, dass nur die Keys berücksichtigt die in array1 als Wert vorhanden sind. Ich glaube ein Beispiel sagt mehr als tausend Worte:

$array_1 = array('hund', 'katze', 'maus', 'panzer');  
  
$array_2 = array('wald'=>'a', 'katze'=>'b', 'bier'=>'c', 'maus'=>'d', 'makrele'=>'e');  
  
  
// Am Ende soll rauskommen:  
$array_3 = array( 'katze'=> 'b', 'maus'=>'d');

Natürlich könnte ich eine Schleife nutzen, aber ich bin mir eigentlich sicher die gleiche Aufgebenstellung schon mal anders gelöst zu haben, komme aber nicht mehr drauf. Eine Idee?

Mario

  1. Hello,

    laufe Array 1 ab und schaue nach, ob für den jeweilgen Wert ein Key in Array 2 vorhanden ist. Wann ja, mache einen Eintag in Array 3.

    Du benötigst dazu

    foreach()   http://www.php.net/manual/en/control-structures.foreach.php
    isset()     http://www.php.net/manual/en/function.isset.php
    und die ganz normale Überladung des Index-Eintrags (append or edit)
    $array3[$index] = $neuerwert;

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi,

      laufe Array 1 ab und schaue nach, ob für den jeweilgen Wert ein Key in Array 2 vorhanden ist. Wann ja, mache einen Eintag in Array 3.

      Du benötigst dazu

      foreach()   http://www.php.net/manual/en/control-structures.foreach.php
      isset()     http://www.php.net/manual/en/function.isset.php
      und die ganz normale Überladung des Index-Eintrags (append or edit)
      $array3[$index] = $neuerwert;

      Kann es sein, dass du meine Frage nicht richtig gelesen hast und dir nun umsonst die Mühe gemacht hast, die Manual Verweise zu posten?

      Zitat:

      Natürlich könnte ich eine Schleife nutzen, aber ich bin mir eigentlich sicher die gleiche Aufgebenstellung schon mal anders gelöst zu haben, komme aber nicht mehr drauf. Eine Idee?

      Trotzdem danke für den Versuch
      Mario

      1. Hello,

        Kann es sein, dass du meine Frage nicht richtig gelesen hast und dir nun umsonst die Mühe gemacht hast, die Manual Verweise zu posten?

        wollen wir wetten?

        Liebe Grüße aus dem Cyberspace

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi,

          »» Kann es sein, dass du meine Frage nicht richtig gelesen hast und dir nun umsonst die Mühe gemacht hast, die Manual Verweise zu posten?

          wollen wir wetten?

          Wie wäre der Wortlaut der Wette?

          Mario

          1. Hello,

            wollen wir wetten?

            Wie wäre der Wortlaut der Wette?

            Meine Tipps sind zielführend.

            100 Euro?

            Ins Hotel geh ich aber nicht mit!

            Liebe Grüße aus dem Cyberspace

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
  2. echo $begrüßung;

    möchte ein Array mit einem anderen Array vergleichen und ein neues Array erstellen, dass nur die Keys berücksichtigt die in array1 als Wert vorhanden sind. Ich glaube ein Beispiel sagt mehr als tausend Worte:
    Natürlich könnte ich eine Schleife nutzen, aber ich bin mir eigentlich sicher die gleiche Aufgebenstellung schon mal anders gelöst zu haben, komme aber nicht mehr drauf. Eine Idee?

    Es gibt diverse Array-Funktionen mit intersect (und uintersect) im Namen. Die vergleichen aber nur Keys mit Keys, Werte mit Werten aber nicht gemischt. Du könntest mit einer Key-vergleichenenden und Benutzervergleichsfunktion aufrufenden Variante was zaubern. Das ist aber nicht besonders schön, weil die Benutzervergleichsfunktion sich das Werte-Array beschaffen muss (dazu muss es global rumliegen oder du musst was objektorientiertes bauen), damit es von dem übergebenen Key den Wert nachschlagen kann. Eine Alternative ist, eins der Arrays zu flippen (wobei du aber aufpassen musst, dass die Werte eindeutig sind, sonst gehen Elemente verloren) und dann eine intersect-Funktion anwenden.

    echo "$verabschiedung $name";

    1. Hi,

      was du schreibst war auch mein Gedankengang, also array_flip und dann mit zb. array_diff_key oder array_intersect_key das gewünschte Array zu erhalten.

      Aber das scheitert an: (PHP 5 >= 5.1.0)

      So hoffte ich ähnliches zu finden, dass auch noch mit PHP4 funktioniert.
      Und eigentlich war ich mir sicher das auch schon mal gemacht zu haben, aber na ja vielleicht irre ich mich auch.

      Deine Warnung bezüglich array_flip hatte ich auch schon wieder fast vergessen, danke für den Hinweis.

      Mario

      1. echo $begrüßung;

        So hoffte ich ähnliches zu finden, dass auch noch mit PHP4 funktioniert.

        Chancen, ein in PHP geschriebenes Pendant zu ab PHP 5 erhältlichen Funktionen zu finden, hat man bei PEAR. Ich glaube, PEAR_Compat hieß das Paket.

        echo "$verabschiedung $name";

        1. Hello,

          Chancen, ein in PHP geschriebenes Pendant zu ab PHP 5 erhältlichen Funktionen zu finden, hat man bei PEAR. Ich glaube, PEAR_Compat hieß das Paket.

          ... oder man macht es gleich so, wie ich beschrieben habe. Wo ist das Problem?

          https://forum.selfhtml.org/?t=185417&m=1230347

          Nun habe ich mal keinen Code gepostet und schon klappt es nicht? ;-))

          Liebe Grüße aus dem Cyberspace

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. echo $begrüßung;

            ... oder man macht es gleich so, wie ich beschrieben habe. Wo ist das Problem?

            Das Problem ist die "Verweigerungshaltung" des OP in diesem Fall. Er wollte halt was anderes haben. Dass das gegenüber der Schleifen-Lösung mehr Aufwand bedeutet, dürfte er nun sehen und vielleicht gibt er nun der Schleife doch eine Chance.

            echo "$verabschiedung $name";

  3. $array_1 = array('hund', 'katze', 'maus', 'panzer');

    $array_2 = array('wald'=>'a', 'katze'=>'b', 'bier'=>'c', 'maus'=>'d', 'makrele'=>'e');

    // Am Ende soll rauskommen:
    $array_3 = array( 'katze'=> 'b', 'maus'=>'d');

      
    <http://de.php.net/manual/en/function.array-fill-keys.php>  
    gepaart mit  
    <http://de.php.net/manual/en/function.array-intersect-key.php>  
    
    
    1. Sorry, erst gerade gelesen das du es für PHP4 benötigst, da gibt es m.W. keine befriedigende PHP-eigene Funktion

  4. Hallo

    möchte ein Array mit einem anderen Array vergleichen und ein neues Array erstellen, dass nur die Keys berücksichtigt die in array1 als Wert vorhanden sind. Ich glaube ein Beispiel sagt mehr als tausend Worte:

    $array_1 = array('hund', 'katze', 'maus', 'panzer');

    $array_2 = array('wald'=>'a', 'katze'=>'b', 'bier'=>'c', 'maus'=>'d', 'makrele'=>'e');

    // Am Ende soll rauskommen:
    $array_3 = array( 'katze'=> 'b', 'maus'=>'d');

      
    Das Zusammenführen der Arrays erledigt [array_combine](http://de.php.net/manual/de/function.array-combine.php) für dich, allerdings erst ab PHP5. In den Nutzerkommentaren gibt es aber auch [eine Lösung für PHP4](http://de.php.net/manual/de/function.array-combine.php#78244) (warum auch immer man das heute noch einsetzt), deren Funktion du allerdings selbst kontrollieren müsstest. Das Filtern nach den Keys lässt sich da auch einbauen.  
      
    Tschö, Auge  
    
    -- 
    Die deutschen Interessen werden am Liechtenstein verteidigt.  
      
    [Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)