PHP array_intersect + array_flip с массивом, который имеет значения несколько раз

У меня есть два массива:

$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)

таким образом, ключи теряются и не могут быть правильно пересечены. Есть ли способ получить желаемый результат?

2

Решение

Следующий код делает работу. Я надеюсь, что это говорит само за себя.

array_unique(array_intersect_key($arr1, array_flip($arr2)))
2

Другие решения

Использование стандартных функций библиотеки 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,

0

По вопросам рекламы [email protected]