bleicher: Array kürzen - nur die keys mit den Namen aus Array 2 lassen

Grüße,
ich fand, oder erkannte nciht eine PHP-funktion die es mir erlauben würde, aus einem array alles keys zu löschen, die nicht als werte im Array 2 gespeichert sind. momentan löse ich das mit paar schleifen - geht das auch besser? array_intersect überprfüft ja die werte - zweifaches austauschen von keys/werten ist nicht die lösung, oder?
MFG
bleicher

  1. Hello,

    dafür benötigst Du genau eine foreach-Schleife und ein isset() in der Schleife mit anschließender Zuweisung.

    $_values = array();
        # ... füllen
        $_keys   = array();
        # ... füllen

    $_result = array();

    foreach ($_keys as $key)
        {
            if(isset($_values[$key]))
            {
                $_result[$key] = $_values[$key];
            }
        }

    Liebe Grüße aus Syburg

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Grüße,

      dafür benötigst Du genau eine foreach-Schleife und ein isset() in der Schleife mit anschließender Zuweisung.

      $_values = array();
          # ... füllen
          $_keys   = array();
          # ... füllen

      $_result = array();

      foreach ($_keys as $key)
          {
              if(isset($_values[$key]))
              {
                  $_result[$key] = $_values[$key];
              }
          }

      das habe ich sogar ;) die zweite schleife kürzt den "$_keys"  - damit auch wirklich nur "kleinstes gemeinsames" bleibt.

      also anders gehts nicht - ok, danke.
      MFG
      bleicher

  2. Hi,

    array_intersect überprfüft ja die werte -

    Es gibt mehrere arry_intersect-Funktionen - die schon alle in Betracht gezogen?

    zweifaches austauschen von keys/werten ist nicht die lösung, oder?

    Vor allem erfordert es Eindeutigkeit bei den Values, sonst ist es nicht verlustfrei möglich.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
  3. Hi,

    momentan löse ich das mit paar schleifen - geht das auch besser? array_intersect überprfüft ja die werte - zweifaches austauschen von keys/werten ist nicht die lösung, oder?

    wenn ich dich richtig verstehe, möglicherweise mit einer Kombination aus array_intersect_key() und array_flip():

      
    $foo = array('a' => 1, 'b' => 2);  
    $bar = array('a', 'c');  
      
    $baz = array_intersect_key($foo, array_flip($bar)); // ergibt array('a' => 1)  
    
    

    Gruß,
    Andreas.

    1. Grüße,

      $baz = array_intersect_key($foo, array_flip($bar)); // ergibt array('a' => 1)

      das ist gut^^
       intersect_key habe ich irgendwie übersehen ;P danke
      MFG
      bleicher