Несколько простой вопрос пересечения массива PHP

Может быть, я схожу с ума, но я мог бы поклясться, что есть основная функция PHP, которая в качестве аргументов принимала два массива:

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

И выполняет пересечение, где значения из массива $a проверяются для коллизий с ключами в массиве $b . Возвращая что-то вроде

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

Существует ли такая функция (которую я пропустил в документации), или есть очень оптимизированный способ добиться того же?

попробуйте использовать array_flip {ключи ключей со своими значениями}, а затем используйте array_intersect () в вашем примере:

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

Я не на 100% понят, что вы хотите. Вы хотите проверить значения из $ a против KEYS из $ b?

Существует несколько функций пересечения:

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

Но, возможно, вам нужно:

http://www.php.net/manual/en/function.array-intersect-ukey.php, чтобы вы могли определить свою собственную функцию для сопоставления ключей и / или значений.

Сделайте простой foreach для итерации первого массива и получения соответствующих значений из второго массива:

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

Просто вариация ответа Gumbo должна быть более эффективной, поскольку тесты на клавишах выполняются непосредственно перед входом в цикл.

 $intersection = array_intersect($a, array_keys($b)); $result=array(); foreach ($intersection as $key) { $result[$k]=$b[$k]; }