IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Convertir un tableau en paramètre de fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 59
    Par défaut Convertir un tableau en paramètre de fonction
    Bonjour à tous,

    Je me trouve confronté à un petit problème, je dois convertir un tableau en paramètre de fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function f1($param){
    	f2($n1, $n2, $n3);
    }
    $param est un tableau
    à partir de $param, je dois retrouvé $n1, $n2 ... autant de paramètres qu'il y a d'éléments dans le tableau, car, c'est bien la le problème, c'est que le nombre d'éléments dans le tableau est variable, donc le nombre de paramètres à passer dans f2 est également variable.

    Comment puis-je faire ceci ?

    Merci d'avance pour votre coup de main

    Cyril

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Une solution pourrait être de fixer les paramètres par défaut et de les remplacer par les valeurs de $param quand elles existent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $f2_param = array(NULL, 0, "abcd", NULL);
     
    foreach($param as $key=>$value) {
       $f2_param[$key] = $value;
    }
     
    f2($f2_param[0], $f2_param[1], $f2_param[2], $f2_param[3]);
    Cela reste du bidouillage pas très propre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu as regardé du côté de call_user_func() | call_user_func_array() | func_get_args()?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Salut,

    Pourquoi ne pas utiliser un tableau comme paramètre de f2?

  5. #5
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Si les arguments sont du même type, je suis de l'avis billoum.

    Sinon call_user_func_array() est parfait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function f2() {
        foreach (func_get_args() as $key => $value) {
            echo "L'argument ".$key." est : ". $value."<br />\n";
        }
    }
     
    function f1($param) {
        call_user_func_array('f2', $param);
    }
     
    $param = array(0, 'a', null, false);
     
    f1($param);
    Au passage si "f1" ne fait que ça, autant appeler directement f2 ^^

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 59
    Par défaut
    merci pour vos réponses, c'est cooool

    je ne suis pas certain de bien vous comprendre, si ce n'est Sabotage !! d'ailleurs, même si ce n'est pas très propre je suis parti de cette idée, même si je te l'accorde, c'est du bidouillage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $numargs = count ($param);
    switch ($numargs) 
    {
        case 0:
            $r = $c->$method();
            break;
        case 1:
            $r = $c->$method($param[0]);
            break;
        case 2:
            $r = $c->$method($param[0], $param[1]);
            break;
        case 3:
            $r = $c->$method($param[0], $param[1], $param[2]);
            break;	
        case 4:
            $r = $c->$method($param[0], $param[1], $param[2], $param[3]);
            break;		
        ...
        default:
           break;
    }
    je fais la exactement ce que je souhaitais éviter !!! pour la simple raison est que je ne couvre pas tous les cas !!
    pour préciser, il se trouve que f2 est en fait une variable contenant le nom de la fonction à appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    f1($f2, $param)
    {
        $f2 (...);
    }
     
    f1("une_function", array("param1", "param2"));
    f1("une_autre_function", array("param1", "param2", "param3", "param4"));
    C'est la raison pour laquelle, je ne sais pas exactement le nombre de paramètre dans le fonction f2.
    Et c'est aussi la raison pour laquelle Spartacusply ta solution ne peut fonctionner, je ne peux pas et ne dois pas intervenir dans les fonctions f2, mais simplement les appeler.

    Il me faut donc une astuce pour récupérer le contenu de param le passer en paramètre de f2 !!! et la ->

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 31/03/2010, 16h19
  2. Appel de tableau en paramètres de fonction
    Par Linkin dans le forum Langage
    Réponses: 8
    Dernier message: 30/04/2008, 11h23
  3. c++ vers c# tableau comme paramétres de fonction
    Par punto dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/03/2008, 11h21
  4. tableau en paramètre de fonction
    Par tom31 dans le forum C
    Réponses: 1
    Dernier message: 09/02/2008, 08h55
  5. Tableau en paramêtre de fonction
    Par LeSkaMan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/01/2007, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo