Domanda

Forse sto diventando pazzo, ma avrei giurato che c'era una funzione core di PHP che ha avuto due array come argomenti:

$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');

E esegui un incrocio dove i valori di matrice $a sono controllati per collisioni con le chiavi nella matrice $b. Tornando qualcosa come

array('1'=>'apples', '3'=>'kiwis');

Esiste una tale funzione esiste (che ho perso nella documentazione), oppure c'è un modo molto ottimizzato per ottenere la stessa cosa?

È stato utile?

Soluzione

provare a utilizzare array_flip {tasti interruttori con i loro valori} e quindi utilizzare array_intersect () il tuo esempio:

$c = array_flip($b); // so you have your original b-array
$intersect = array_intersect($a,c);

Altri suggerimenti

Sono chiaro al 100% ciò che si desidera. Vuoi verificare i valori di $ un contro CHIAVI da $ b?

Ci sono alcune funzioni si intersecano:

http://php.net/manual/en/function.array -intersect.php http://www.php.net/manual/en/ function.array-intersecano-key.php

Ma forse è necessario:

http://www.php.net/manual /en/function.array-intersect-ukey.php modo che si può definire la propria funzione per la corrispondenza chiavi e / o valori.

Fare un semplice foreach per iterare il primo array e ottenere i valori corrispondenti dal secondo array:

$output = array();
foreach ($a as $key) {
    if (array_key_exists($key, $b)) {
        $output[$key] = $b[$key];
    }
}

Appena una variazione della risposta Gumbo, dovrebbe essere più efficiente i test sui tasti vengono eseguite prima di entrare nel ciclo.

$intersection = array_intersect($a, array_keys($b));
$result=array();
foreach ($intersection as $key) {
    $result[$k]=$b[$k];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top