PHP-Array-Funktion, die eine Teilmenge für bestimmte Schlüssel zurückgibt

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer1517081

Ich suche eine Array-Funktion, die so etwas tut:

$myArray = array(
  'apple'=>'red',
  'banana'=>'yellow',
  'lettuce'=>'green',
  'strawberry'=>'red',
  'tomato'=>'red'
);
$keys = array(
  'lettuce',
  'tomato'
);

$ret = sub_array($myArray, $keys);

wo $ret ist:

array(
  'lettuce'=>'green',
  'tomato'=>'red'
);

Ich habe kein Problem damit, es selbst aufzuschreiben, die Sache ist die, dass ich eine foreach-Schleife vermeiden und eine eingebaute Funktion oder eine Kombination eingebauter Funktionen übernehmen möchte. Es scheint mir eine allgemeine und übliche Array-Operation zu sein – ich wäre überrascht, wenn eine Schleife die einzige Option wäre.

  • Duplizieren: stackoverflow.com/questions/3454993/…

    – David Hancock

    22. September 2012 um 11:45 Uhr

  • Siehe auch: stackoverflow.com/questions/13766898 – Umgang mit Teilzeichenfolgen von array_key anstelle von ganzen array_keys.

    – dreftymac

    24. August 2019 um 22:52 Uhr

  • Siehe auch: underscorejs.org/#pick und stackoverflow.com/a/40270589/42223 für die Beziehung dazu higher-order-functions

    – dreftymac

    24. August 2019 um 23:11 Uhr

Das funktioniert:

function sub_array(array $haystack, array $needle)
{
    return array_intersect_key($haystack, array_flip($needle));
}

$myArray = array(
    'apple'=>'red',
    'banana'=>'yellow',
    'lettuce'=>'green',
    'strawberry'=>'red',
    'tomato'=>'red'
);
$keys = array(
    'lettuce',
    'tomato'
);

$ret = sub_array($myArray, $keys);

var_dump($ret);

  • array_flip hat mir das Leben gerettet. Vielen Dank.

    – ssi-anik

    25. März 2016 um 0:13 Uhr

  • Vielen Dank. Neu bei PHP und von R kommend, wo das Subsetting im Handumdrehen erledigt ist, fing ich langsam an, mir die Haare auszureißen. Das hat meine Kopfhaut gerettet 😉 Wenn ich dir +10 geben könnte, würde ich es gerne tun.

    – Joel.O

    30. September 2016 um 14:49 Uhr

  • @Joel.O Sie können der Frage ein Kopfgeld hinzufügen und es vergeben.

    – Benutzer151841

    16. August 2017 um 19:03 Uhr

  • Dies sollte eine interne PHP-Array-Funktion sein.

    – Dylan Pierce

    11. Januar 2019 um 22:25 Uhr

Benutzer-Avatar
Pradeep Sanjaya

Sie können array_intersect_key verwenden, aber es verwendet ein zweites Array mit Schlüsseln und Werten. Es berechnet den Schnittpunkt von Arrays unter Verwendung von Vergleichsschlüsseln

array_intersect_key

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
$array3 = array('green' => '', 'blue' => '', 'yellow' => '', 'cyan' => '');
$array4 = array('green', 'blue', 'yellow', 'cyan');

var_dump(array_intersect_key($array1, $array2));
var_dump(array_intersect_key($array1, $array3));
var_dump(array_intersect_key($array1, $array4));
?>

Das obige Beispiel wird ausgegeben:

array(2) {
  ["blue"]=>
  int(1)
  ["green"]=>
  int(3)
}

array(2) {
  ["blue"]=>
  int(1)
  ["green"]=>
  int(3)
}

array(0) {
}

  • Wie ist dies die akzeptierte Antwort? Einfache Lösung gemäß der Antwort von @Maciej: array_intersect_key($array1, array_flip($array4));

    – Brad Kent

    29. Januar 2016 um 5:26 Uhr


Benutzer-Avatar
Nicolas Dermin

    $ret = array_filter($myArray, function ($key) use ($keys) {
        return in_array($key, $keys);
    }, ARRAY_FILTER_USE_KEY);

  • Notiz: Dies liefert möglicherweise nicht das erwartete Ergebnis, da die $keys Variable ist außerhalb der anonymen Funktion. Bitte überprüfen Sie die use Schlüsselwort – wie in diesem Stackoverflow-Beitrag beschrieben: stackoverflow.com/a/8403958/42223

    – dreftymac

    24. August 2019 um 22:44 Uhr


Einzeiler:

$subArray = array_intersect_key($items, array_fill_keys($keys, 1));

Beispiel:

<?php
$items = [ 'product_id' => 1234, 'color' => 'green', 'qty' => 5, 'desc' => 'Shirt' ];
$keys = [ 'product_id', 'desc' ];
$subArray = array_intersect_key($items, array_fill_keys($keys, 1));
var_dump($subArray);

Produziert:

array(2) {
  ["product_id"]=>
  int(1234)
  ["desc"]=>
  string(5) "Shirt"
}

Arbeitet mit:

  • Zifferntasten,
  • assoziative Arrays,
  • gemischte Arrays,
  • Arrays mit nicht eindeutigen Werten
1175920cookie-checkPHP-Array-Funktion, die eine Teilmenge für bestimmte Schlüssel zurückgibt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy