我需要发送PARAMS的功能带有(未知)可变数量参数的调用函数?
array_intersect_key()
但有时我需要发送2个阵列,有时 - 3或更多:
array_intersect_key($arr_1, $arr_2);
OR
array_intersect_key($arr_1, $arr_2, $arr_3, $arr_4);
我需要发送PARAMS的功能带有(未知)可变数量参数的调用函数?
array_intersect_key()
但有时我需要发送2个阵列,有时 - 3或更多:
array_intersect_key($arr_1, $arr_2);
OR
array_intersect_key($arr_1, $arr_2, $arr_3, $arr_4);
假设你想创建自己的功能就是这样,关键是要使用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);
我从来没有遇到过这个功能,而且我觉得我应该很久以前 - 非常感谢您将它引入我的注意! – Thomas 2014-03-05 20:15:30
的array_intersect_key
有已经是protoype允许多个输入:
array array_intersect_key (array $array1 , array $array2 [, array $ ... ])
所以我真的没有看到那里的问题。
问题是“如何用N个输入调用它”? – 2012-04-12 17:26:39
array_intersect_key($ array1,$ array2,$ array3,...,$ arrayN); – Claaker 2012-04-12 18:39:44
这个答案并不涉及OP将不会事先知道(编程)多少个参数传递给'array_intersect_key()'的知识。你没有看到这个问题,因为你误解了这个问题是关于写一个可变参数函数的问题。 Downvote,因为这个答案没有帮助。 – mickmackusa 2017-04-20 02:00:28
call_user_func_array('foo', array('foo', 'bar', 'foo N'));
function foo($param1, $param2, $paramN) {
// TADÁÁÁ
}
看看func_get_args() method来处理这个;是这样的:
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];
}
}
}
请先询问有关标准功能之前,参考了http://php.net网站,因为你让所有的疑问句tions在那里回答。
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-12 17:25:43
@pst对不起,这个答案。现在添加代码。 – vedarthk 2012-04-12 19:25:30
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);
如果我理解你的问题,你已经回答了。 – mrlee 2012-04-12 17:18:53