我需要發送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