I have two arrays:
$arr1 = array(101 => 250, 102 => 250, 103 => 250, 104 => 500, 105 => 500, 106 => 500,);
and
$arr2 = array(0 => 103, 1 => 104, 2 => 105)
The result I want to get is
Array (103 => 250, 104 => 500)
I have tried working with
array_intersect(array_flip($arr1), $arr2);
but
array_flip($arr1)
gives something like
Array(103 => 250, 106 => 500)
thus, keys get lost and can not be intersected correctly. Is there a way to get the desired result?
2 Answers 2
The following code does the job. I hope it is self-explanatory.
array_unique(array_intersect_key($arr1, array_flip($arr2)))
answered Jan 28, 2016 at 14:56
Ihor Burlachenko
4,9331 gold badge31 silver badges25 bronze badges
Sign up to request clarification or add additional context in comments.
1 Comment
Tris
perfect! I just needed to use the array_flip on the other array and then use array_intersect_key. Of cause! thanks :)
Using the standard php library functions for this might reduce the readability of the code. I would go with an explicit foreach loop that goes over $arr2.
$ans = array();
foreach($arr2 as $key) {
if (isset($arr1[$key]) && !in_array($arr1[$key], $ans)) {
$ans[$key] = $arr1[$key];
}
}
This function should O(n*n) where n is the length of $arr2.
answered Jan 28, 2016 at 15:04
Scott
12.4k4 gold badges30 silver badges48 bronze badges
Comments
Explore related questions
See similar questions with these tags.
lang-php
array_intersect_keys()instead, which uses keys instead of values for the intersection comparisons.