PHP array_intersect + array_flip 具有多个值的数组
PHP array_intersect + array_flip with array that has values multiple times
我有两个数组:
$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 库函数可能会降低代码的可读性。我会使用遍历 $arr2
.
的显式 foreach
循环
$ans = array();
foreach($arr2 as $key) {
if (isset($arr1[$key]) && !in_array($arr1[$key], $ans)) {
$ans[$key] = $arr1[$key];
}
}
这个函数应该是 O(n*n),其中 n 是 $arr2
的长度。
我有两个数组:
$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 库函数可能会降低代码的可读性。我会使用遍历 $arr2
.
foreach
循环
$ans = array();
foreach($arr2 as $key) {
if (isset($arr1[$key]) && !in_array($arr1[$key], $ans)) {
$ans[$key] = $arr1[$key];
}
}
这个函数应该是 O(n*n),其中 n 是 $arr2
的长度。