Intersect неизвестное количество массивов в PHP
Я пытаюсь пересечь произвольное количество массивов PHP, количество которых зависит от параметра, предоставленного пользователем, каждый из которых может иметь любое количество элементов.
Например:
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)
Так как array_intersect принимает список параметров, я не могу построить один массив массивов для пересечения и должен работать по этому пути. Я пробовал это решение: http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays, но это не сработало, так как сообщается об ошибке, что array_intersect требует 2 или более параметров.
Кто-нибудь знает, как подойти к этому как можно проще?
Ответы
Ответ 1
Создайте новый пустой массив, добавьте к нему каждый из ваших массивов, затем используйте call_user_func_array()
$wrkArray = array( $userArray1,
$userArray2,
$userArray3
);
$result = call_user_func_array('array_intersect',$wrkArray);
Ответ 2
Не используйте eval()!
Попробуйте это
$isect = array();
for ($i = 1; $i <= $N; $i++) {
$isect = array_intersect($isect, ${'array'.$i});
}
или что
$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
Я отправляю свой ответ очень поздно, но хочу поделиться небольшим фрагментом кода, который мне помогает, если кому-то это понадобится для этого вопроса.
print_r(array_intersect(array_merge($array1,$array2,...),$intersectionArr);
Я надеюсь, что это поможет
Спасибо