У меня есть два массива:
$arr1 = array(101 => 250, 102 => 250, 103 => 250, 104 => 500, 105 => 500, 106 => 500,);
а также
$arr2 = array(0 => 103, 1 => 104, 2 => 105)
Результат, который я хочу получить,
Array (103 => 250, 104 => 500)
Я пытался работать с
array_intersect(array_flip($arr1), $arr2);
но
array_flip($arr1)
дает что-то вроде
Array(103 => 250, 106 => 500)
таким образом, ключи теряются и не могут быть правильно пересечены. Есть ли способ получить желаемый результат?
Следующий код делает работу. Я надеюсь, что это говорит само за себя.
array_unique(array_intersect_key($arr1, array_flip($arr2)))
Использование стандартных функций библиотеки php для этого может снизить читабельность кода. Я бы пошел с явным foreach
цикл, который проходит $arr2
,
$ans = array();
foreach($arr2 as $key) {
if (isset($arr1[$key]) && !in_array($arr1[$key], $ans)) {
$ans[$key] = $arr1[$key];
}
}
Эта функция должна O (n * n), где n — длина $arr2
,