2012-04-12 2 views

Répondre

7

En supposant que vous voulez créer votre propre fonction comme celui-ci, la clé est d'utiliser func_get_args():

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

Si vous voulez juste appeler avec plusieurs args, soit « il suffit de faire il » ou utiliser call_user_func_array():

$args = array(); 
... append args to $args 
call_user_func_array('array_intersect_key', $args); 
+0

Je n'ai jamais rencontré cette fonction auparavant et je pense que je devrais avoir un très long temps - je vous remercie beaucoup d'avoir attiré mon attention! – Thomas

-1

Le array_intersect_key a déjà un prototype permettant entrées multiples:

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

Donc, je ne vois pas vraiment le problème ici.

+0

Le problème est "comment l'appeler avec N entrées"? –

+0

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

+0

Cette réponse ne traite pas du fait que l'OP n'aura aucune connaissance préalable (par programmation) du nombre d'arguments qui seront passés à 'array_intersect_key()'. Vous ne voyez pas le problème parce que vous vous méprenez sur le fait que la question concerne l'écriture d'une fonction variadique. Downvote, parce que cette réponse n'est pas utile. – mickmackusa

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

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

Jetez un coup d'oeil dans le func_get_args() method pour le gérer; quelque chose comme:

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

S'il vous plaît se référer au site http://php.net avant de poser des questions sur les fonctions standard, parce que vous obtenez tous vos files les réponses y ont été

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

je suis arrivé à votre question, voici une façon que vous pouvez faire:

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

ou

$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 contiendrait maintenant l'intersection.

+0

S'il vous plaît développer sur les liens et comment ils se rapportent à la question. Un petit exemple va un long chemin pour augmenter la qualité d'une réponse. –

+0

@pst Désolé pour cette réponse. Code maintenant ajouté. – 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); 
Questions connexes