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?

War es hilfreich?

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];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top