Etwas einfacher PHP Frage Array Schnitt
-
20-09-2019 - |
Frage
Vielleicht werde ich verrückt, aber ich hätte schwören können, dass es eine PHP-Kernfunktion war die Argumente nahmen zwei Arrays als:
$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');
und führt eine Kreuzung, wo die Werte von Array $a
für Kollisionen mit den Schlüsseln in Array $b
geprüft. Wiederkehrende etwas wie
array('1'=>'apples', '3'=>'kiwis');
Gibt es eine solche Funktion exist (die ich in der Dokumentation verpasst), oder gibt es eine sehr optimierte Art und Weise, das Gleiche zu erreichen?
Lösung
versuchen Sie es mit array_flip {Schalter Tasten mit ihren Werten} und verwenden Sie dann array_intersect () auf Ihrem Beispiel:
$c = array_flip($b); // so you have your original b-array
$intersect = array_intersect($a,c);
Andere Tipps
Ich bin nicht 100% klar, was Sie wollen. Wollen Sie Werte von $ a gegen KEYS von $ b überprüfen?
Es gibt ein paar intersect Funktionen:
http://php.net/manual/en/function.array -intersect.php http://www.php.net/manual/en/ function.array-intersect-key.php
Aber vielleicht brauchen Sie:
http://www.php.net/manual /en/function.array-intersect-ukey.php so dass Sie Ihre eigene Funktion für Schlüssel und / oder Wert entspricht.
definieren Führen Sie eine einfache foreach
zu Iterierte das erste Array und die entsprechenden Werte aus der zweiten Reihe bekommen:
$output = array();
foreach ($a as $key) {
if (array_key_exists($key, $b)) {
$output[$key] = $b[$key];
}
}
Nur eine Variation der Gumbo Antwort sollte effizienter sein als die Tests auf den Tasten ausgeführt werden, kurz bevor die Schleife eintritt.
$intersection = array_intersect($a, array_keys($b));
$result=array();
foreach ($intersection as $key) {
$result[$k]=$b[$k];
}