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 :

Insérer variables dans une fonction [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut Insérer variables dans une fonction
    Bonjour,

    Je suis actuellement en train de créer un configurateur produit mais je bute sur un problème, que je pense assez bénin mais donc je n'arrive pas a me sortir.
    Une fonctionnailté de ce configurateur permet de rechercher un produit par sa référence.
    Après avoir exécuté ma requête, j'affiche le résultat dans un tableau.
    J'avais mis en place une fonction de tri en php qui, quand on clique sur un champs de colonne, recharge la page actuelle en ajoutant une condition ORDER BY à ma requête.
    Cependant, par souci de rapidité et d'organisation, j'ai souhaité abandonner cette solution.
    J'utilise maintenant array_multisort qui me permet de trier mon résultat directement a partir du résultat (sans rééxécuter la requête).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach ($resultat as $key => $row) {
    	$tfamille[$key]  = $row['famille'];
    	$treference[$key] = $row['reference'];
    	$tdebit[$key]  = $row['debit'];
    	$tpmax[$key] = $row['pmax'];
    	$tvitesse_moteur[$key]  = $row['vitesse_moteur'];
    	$tcadence[$key] = $row['cadence'];
    }
    array_multisort($treference, SORT_DESC, $resultat);
    Je souhaiterai rendre cette fonction plus souple en y intégrant des variables afin d'éviter d'énumérer toutes les possibilités de tri. Du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $tri = "SORT_DESC";
    $champ = "$treference"
    array_multisort($champ, $toto, $resultat);
    Mais bien sur:
    array_multisort() [function.array-multisort]: Argument #2 is expected to be an array or a sort flag
    Est-ce que quelqu'un pourrait m'aider ?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Utilise la fonction eval();

    A+.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Je doit mal l'utiliser, je n'arrive pas a faire fonctionner la fonction eval().
    Quand je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $tri = "SORT_ASC";
    $champ = "$treference";
    $res = "$resultat";
     
    $str = 'array_multisort($champ, $tri, $res)';
     
    echo $str."<br/>";
     
    $toto = eval( "\$str = \"$str\";" );
     
    echo $toto;
     
    echo $str;
    Il me retourne
    array_multisort($champ, $tri, $res)
    array_multisort(Array, SORT_ASC, Array)
    Au lieu de :
    array_multisort($treference, SORT_ASC, $resultat);
    Après, j'ai beau faire :
    Ca ne fonctionne pas...Normal
    A l'aide svp.

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Pourquoi ne pas simplement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tri = SORT_DESC;
    $champ = $treference;
    array_multisort($champ, $tri, $resultat);

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut
    Parce que mon $treference je veux le générer.
    $champ = $treference
    Je n'ai aucun intérêt à le recopier a l'identique.

    Je m'explique:
    Quand je clique sur un champs, je recharge ma page avec un paramètre GET qui me précise le nom du champ à trier. c'est à partir de ce paramètre GET que je veut faire le tri.

    ex:
    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
     
    $orderby = $_GET['orderby']; //ex:$orderby = treference
    $tri = $_GET['tri']; //$tri = SORT_ASC ou SORT_DESC
    $champ = "$".$orderby;
    $res = "$resultat"; //$resultat c'est mon tableau de résultat complet
     
    foreach ($resultat as $key => $row) {
    	$tfamille[$key]  = $row['famille'];
    	$treference[$key] = $row['reference'];
    	$tdebit[$key]  = $row['debit'];
    	$tpmax[$key] = $row['pmax'];
    	$tvitesse_moteur[$key]  = $row['vitesse_moteur'];
    	$tcadence[$key] = $row['cadence'];
    }
     
    $str = 'array_multisort($champ, $tri, $res)';
    Merci d'avance

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Où est le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $orderby = $_GET['orderby']; //ex:$orderby = treference
    $tri = $_GET['tri']; //$tri = SORT_ASC ou SORT_DESC
    $champ = ${$orderby};
     
    foreach ($resultat as $key => $row) {
    	$tfamille[$key]  = $row['famille'];
    	$treference[$key] = $row['reference'];
    	$tdebit[$key]  = $row['debit'];
    	$tpmax[$key] = $row['pmax'];
    	$tvitesse_moteur[$key]  = $row['vitesse_moteur'];
    	$tcadence[$key] = $row['cadence'];
    }
     
    array_multisort($champ, constant($tri), $resultat);
    En n'oubliant pas de faire les vérifs nécessaires, comme vérifier si la constant passée en paramètre existe bien avant d'utiliser la fonction constant().

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

Discussions similaires

  1. Passage de variables dans une fonction
    Par renaud26 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/07/2006, 17h49
  2. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00
  3. [Tableaux] Récuperer variable dans une fonction
    Par amarcil dans le forum Langage
    Réponses: 12
    Dernier message: 12/02/2006, 10h56
  4. Pb de variable dans une fonction :
    Par soad029 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2005, 13h54
  5. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50

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