Пересечение неизвестного количества массивов в PHP

Я пытаюсь пересечь произвольное количество массивов PHP, число которых зависит от предоставленного пользователем параметра, каждый из которых может иметь любое количество элементов.

Например: array1(1, 2, 3, 4, 5) array2(2, 4, 6, 8, 9, 23) array3(a, b, 3, c, f) ... arrayN(x1, x2, х3, х4, х5 ... хн)

Так как array_intersect принимает список параметров, я не могу создать один массив массивов для пересечения, и мне придется обойти это. Я попробовал это решение: http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays но это не сработало, так как сообщается об ошибке, что array_intersect требует 2 или более параметров.

У кого-нибудь есть идеи, как подойти к этому как можно проще?

5 ответов

Решение

Создайте новый пустой массив, добавьте к нему каждый из ваших массивов, затем используйте call_user_func_array()

$wrkArray = array( $userArray1,
                   $userArray2,
                   $userArray3
                 );
$result = call_user_func_array('array_intersect',$wrkArray);
$arrays = [
    $userArray1,
    $userArray2,
    $userArray3
];
$result = array_intersect(...$arrays);

Не используйте 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);

Я публикую свой ответ очень очень поздно, но просто хочу поделиться небольшим фрагментом кода, который мне поможет, на случай, если кому-то понадобится этот вопрос.

print_r(array_intersect(array_merge($array1,$array2,...),$intersectionArr);

надеюсь, это поможет

Спасибо

Используйте оператор splat (...) как в: array_intersect(...$arrayOfArrays) или взаимозаменяемо call_user_func_array,

Это в коде в этом руководстве: https://www.youtube.com/watch?v=AMlvtgT3t4E

Другие вопросы по тегам