PHP array_intersect + array_flip,其数组具有多次值

时间:2016-01-28 14:50:39

标签: php arrays 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 个答案:

答案 0 :(得分:2)

以下代码完成了这项工作。我希望这是不言自明的。

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

答案 1 :(得分:0)

使用标准的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的长度。