2012-04-12 3 views
4

私は関数に(不明な)可変数のパラメータを持つ関数を呼び出しますか?

array_intersect_key() 

をのparamsを送信する必要がありますが、時々私は時々、2つの配列を送信するために必要だ - 3以上:

array_intersect_key($arr_1, $arr_2); 
OR 
array_intersect_key($arr_1, $arr_2, $arr_3, $arr_4); 
+0

私があなたの質問を理解していれば、あなたはすでにそれに答えています。 – mrlee

答えて

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); 
+0

私はこれまでにこの機能に遭遇したことはありません。私は非常に長い時間前にそうしなければならないと感じています。 – Thomas

-1

array_intersect_keyが既に可能protoypeを持っています複数の入力:

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

だから私は本当にそこに問題が表示されません。

+0

問題は「N個の入力を使って呼び出す方法」です。 –

+0

array_intersect_key($ array1、$ array2、$ array3、...、$ arrayN); – Claaker

+0

この答えは、OPが 'array_intersect_key()'に渡される引数の数を(プログラムで)事前に知ることはないという事実を扱っていません。あなたはvariadic関数の作成について質問していると誤解しているので、この問題は表示されません。この答えは役に立たないので、Downvote。 – mickmackusa

0
call_user_func_array('foo', array('foo', 'bar', 'foo N')); 

function foo($param1, $param2, $paramN) { 
    // TADÁÁÁ 
} 
0

これを処理するには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]; 
     } 
    } 
} 
0

すべてのあなたのQUESを取得しているため、標準の機能について尋ねる前に、最初の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には交差点が含まれるようになりました。

+0

リンクを展開して、質問との関連を拡大してください。小さな例は、レスポンスの質を向上させる長い道のりです。 –

+0

@pstその答えは申し訳ありません。コードが追加されました。 – vedarthk

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); 
関連する問題