Alquanto semplice PHP domanda matrice intersezione
-
20-09-2019 - |
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?
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];
}