14

任意の数の 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 はパラメーターのリストを受け取るため、交差する配列の配列を 1 つ作成することはできず、これを回避する必要があります。私はこの解決策を試しました: http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arraysしかし、array_intersect には 2 つ以上のパラメーターが必要であるというエラーが報告されたため、これは機能しませんでした。

できるだけ簡単な方法でこれにアプローチする方法を知っている人はいますか?

4

5 に答える 5

42

新しい空の配列を作成し、それに各配列を追加してから、call_user_func_array()を使用します。

$wrkArray = array( $userArray1,
                   $userArray2,
                   $userArray3
                 );
$result = call_user_func_array('array_intersect',$wrkArray);
于 2011-03-22T10:01:12.617 に答える
4
$arrays = [
    $userArray1,
    $userArray2,
    $userArray3
];
$result = array_intersect(...$arrays);
于 2016-12-03T15:34:34.637 に答える
3

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);
于 2011-03-22T10:04:57.893 に答える
-1

スプラット演算子 ( ...) は、次のように使用するarray_intersect(...$arrayOfArrays)か、交換可能に使用しcall_user_func_arrayます。

このチュートリアルのコードにあります: https://www.youtube.com/watch?v=AMlvtgT3t4E

于 2018-05-02T07:40:02.980 に答える