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 :

[Tableaux] Passer un tableau en paramètre de fonction


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [Tableaux] Passer un tableau en paramètre de fonction
    BOnsware =),

    Voici mon problème : j'ai un tableau définit comme suit :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array('var1' => 'value1',
          'var2' => 'value2');

    Et j'aimerais appeller une fonction _callback() comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    _callback($var1, $var2);
    /**
     * avec $var1 = 'value1';
     * et     $var2 = 'value2';
     */

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    quand tu crées ton tableau avec array, tu lui donnes un nom, par exemple $tableau

    et ta fonction l'appelle comme suit :_callback($tableau)

    et tu retrouves les valeurs avec $tableau['var1]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Tu n'as pas compris ^^. Je ne veux pas que ma fonction s'adapte à un tableau. Cette fonction doit recevoir 2 "string" contenues dans mon tableau. En gros je dois décomposer mon tableau pour passer des variables en paramètres.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    alors je n'ai toujours pas compris ...

    à moins que cela répond : lors de l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _callback($tableau['var1'], $tableau['var2'])

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    J'ai oublié de préciser que je ne connais pas le nombre de paramètres à passer (il varie..) donc ça ne marchera pas.

    J'ai oublié de préciser que la fonction appelée est un peu spéciale... Disons que je veux passer ces paramètres à un constructeur, donc via new Class($var1, $var2);

    =)

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Au lieu de donner des infos au compte goutte ce qui fait perdre du temps à tout le monde, donne tout d'un coup !!!!

    Bref, Un foreach ?, un for ?....

    Si c'est un élément sur deux que tu veux, pour les regrouper 2 par 2 , on peu avoir un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $count=0;
    foreach ($array as $result){
    if($count==2){
       _callback($var[0], $var[1]);
      unset($var);
      $count=0;
    }else{
    $count+=1;
    $var[]=$result;
    }
    }
    Bon, c'est vite fait et pas très réfléchit (y a surement plus simple, maintenant que j'y réfléchit....) Mais : ca te permet de passer 2 argument du tableau, 2 par 2, quelque soit la taille du tableau....

    Maintenant, si ce que tu veux faire c'est transformer ton tableau associatif en liste de variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    array('var1'=>'value1');
    //transrmé en :
    $var1='value1';
    il faut que tu utilise a fonction extract(), appliqué comme ca : extract($array), et ce quelque soit la taille de ton tableau (quoique je ne vois pas tellement l'intérêt....)
    Bonne chance !!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Eu juste en passant ca sort d'ou _callback() parce que introuvable dans la doc php :S
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    C'est call_user_func_array qu'il fallait appeler.
    Voici une fonction postées dans les commentaires de la documentation de cette fonction :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    /**
     * Call a user function using named instead of positional parameters.
     * If some of the named parameters are not present in the original function, they
     * will be silently discarded.
     * Does no special processing for call-by-ref functions...
     * @param string $function name of function to be called
     * @param array $params array containing parameters to be passed to the function using their name (ie array key)
     */
    function call_user_func_named($function, $params)
    {
        // make sure we do not throw exception if function not found: raise error instead...
        // (oh boy, we do like php 4 better than 5, don't we...)
        if (!function_exists($function))
        {
            trigger_error('call to unexisting function '.$function, E_USER_ERROR);
            return NULL;
        }
        $reflect = new ReflectionFunction($function);
        $real_params = array();
        foreach ($reflect->getParameters() as $i => $param)
        {
            $pname = $param->getName();
            if ($param->isPassedByReference())
            {
                /// @todo shall we raise some warning?
            }
            if (array_key_exists($pname, $params))
            {
                $real_params[] = $params[$pname];
            }
            else if ($param->isDefaultValueAvailable()) {
                $real_params[] = $param->getDefaultValue();
            }
            else
            {
                // missing required parameter: mark an error and exit
                //return new Exception('call to '.$function.' missing parameter nr. '.$i+1);
                trigger_error(sprintf('call to %s missing parameter nr. %d', $function, $i+1), E_USER_ERROR);
                return NULL;
            }
        }
        return call_user_func_array($function, $real_params);
    }
    ?>
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

Discussions similaires

  1. [PHP 5.0] [Tableaux] Passer un tableau en paramètre
    Par schats dans le forum Langage
    Réponses: 5
    Dernier message: 27/04/2009, 16h30
  2. Réponses: 6
    Dernier message: 21/06/2007, 15h59
  3. Passer un tableau PHP en argument dans une fonction javascript ?
    Par The Molo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2007, 12h31
  4. Réponses: 7
    Dernier message: 26/04/2007, 12h04
  5. [Tableaux] Passer un tableau dans une requête HTTP ??
    Par haffouff dans le forum Langage
    Réponses: 2
    Dernier message: 09/05/2006, 17h17

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