4

我需要将参数发送到函数

array_intersect_key()

但有时我需要发送 2 个数组,有时 - 3 个或更多:

array_intersect_key($arr_1, $arr_2);
OR
array_intersect_key($arr_1, $arr_2, $arr_3, $arr_4);
4

6 回答 6

7

假设您想像这样创建自己的函数,关键是使用func_get_args()

function mumble(){
    $args = func_get_args();
    foreach ($args as $arg){
        ... whatever
    }
}

如果你只想用多个参数调用它,要么“就做”,要么使用call_user_func_array()

$args = array();
... append args to $args
call_user_func_array('array_intersect_key', $args);
于 2012-04-12T17:21:15.617 回答
0

在询问标准功能之前,请先参考http://php.net站点,因为您会在此处获得所有问题的解答。

http://php.net/manual/en/function.array-intersect-key.php

http://php.net/manual/en/function.func-get-args.php

http://php.net/manual/en/ref.funchand.php

我收到了您的问题,这是您可以做到的一种方法:

$arr_of_arr = array($arr1, $arr2, $arr3, ..., $arrn);

或者

$arr_of_arr = func_get_args();

if(count($arr_of_arr) > 1){
    for($i = 0; $i < count($arr_of_arr) - 1; $i++){
        if(! $i){
            $intersec = array_intersect_key($arr_of_arr[0], $arr_of_arr[1]);
            $i = 2;
        }
        else{
            $intersec = array_intersect_key($intersec, $arr_of_arr[$i++]);
        }
    }
}

$intersec现在将包含交叉点。

于 2012-04-12T17:24:43.963 回答
0
call_user_func_array('foo', array('foo', 'bar', 'foo N'));

function foo($param1, $param2, $paramN) {
    // TADÁÁÁ
}
于 2012-04-12T17:20:34.160 回答
0

看看处理这个的func_get_args() 方法;就像是:

function my_function() {
    $numArgs=func_num_args();
    if($numArgs>0) {
        $argList=func_get_args();
        for($i=0;$i<$numArgs;$i++) {
            // Do stuff with the argument here
            $currentArg=$argList[$i];
        }
    }
}
于 2012-04-12T17:21:03.023 回答
0
function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs<br />";
    $arg_list = func_get_args();
    foreach($arg_list  as $arg) {
        if(is_array($arg)) print_r($arg)."<br />";  
        else echo "<br />".$arg;
    }
}

foo(array(1,2,3), 2, 3);
于 2012-04-12T17:33:48.070 回答
-1

array_intersect_key已经有一个允许多个输入的原型:

array array_intersect_key ( array $array1 , array $array2 [, array $ ... ] )

所以我真的没有看到那里的问题。

于 2012-04-12T17:19:03.493 回答