Может быть, я схожу с ума, но я мог бы поклясться, что есть основная функция 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]; }