问题
I'm trying to intersect an arbitrary number of PHP arrays, the count of which depends on a user provided parameter, each of which can have any number of elements.
For example: array1(1, 2, 3, 4, 5) array2(2, 4, 6, 8, 9, 23) array3(a, b, 3, c, f) ... arrayN(x1, x2, x3, x4, x5 ... xn)
Since array_intersect takes a list of params, I can't build one array of arrays to intersect and have to work my way around this. I tried this solution: http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays but this did not work, as an error is reported that array_intersect requires 2 or more params.
Does anyone have any idea how to approach this in a manner as simple as possible?
回答1:
Create a new empty array, add each of your arrays to that, then use call_user_func_array()
$wrkArray = array( $userArray1,
$userArray2,
$userArray3
);
$result = call_user_func_array('array_intersect',$wrkArray);
回答2:
Don't use eval()!
Try this
$isect = array();
for ($i = 1; $i <= $N; $i++) {
$isect = array_intersect($isect, ${'array'.$i});
}
or that
$arrays = array()
for ($i = 1; $i <= $N; $i++) {
$arrays[] = ${'array'.$i};
}
$isect = call_user_func_array('array_intersect', $arrays);
回答3:
$arrays = [
$userArray1,
$userArray2,
$userArray3
];
$result = array_intersect(...$arrays);
回答4:
I am posting my answer very very late, but just want to share a small piece of code that helps me ,in case somebody needs it for this question.
print_r(array_intersect(array_merge($array1,$array2,...),$intersectionArr);
I hope this helps
Thanks
回答5:
Use the splat operator (...
) as in: array_intersect(...$arrayOfArrays)
or interchangeably call_user_func_array
.
It's in the code in this tutorial: https://www.youtube.com/watch?v=AMlvtgT3t4E
来源:https://stackoverflow.com/questions/5389437/intersect-unknown-number-of-arrays-in-php