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 :

Fonction dans une boucle qui ne renvoie rien


Sujet :

Langage PHP

  1. #1
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut Fonction dans une boucle qui ne renvoie rien
    Salut,

    J'ai une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function cles($fichier, $lines)
    {
    	$trimmed = file($fichier, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    	$indices = array_rand($trimmed, $lines);
    	foreach($indices as $i)
    	{
        	echo trim($trimmed[$i]).', ';
    	}
    }
    elle fait en sorte de me récupérer 100 lignes d'un fichier aléatoirement, si je teste de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $cles = cles('cles.txt', 100);
    echo $cles;
    j'ai bien mes 100 lignes aléatoires.

    Maintenant je souhaite l'utiliser dans une boucle qui fonctionne correctement, je teste à nouveau dans la boucle avec le même test, ca marche
    Par contre, si j'inclus ma variable $cles dans une chaîne de caractère, ma chaîne s'affiche correctement mais c'est vide pour $cles !!

    Une idée ?

    merci d'avance

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    ta fonction ne renvoie rien, mais affiche directement des données avec echo.

    Pour retourner une donnée, tu dois utiliser return.

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function cles($fichier, $lines)
    {
        $trimmed = file($fichier, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        $indices = array_rand($trimmed, $lines);
        return implode(',', $indices);
    }

  3. #3
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    J'avais déjà essayé mais ça me renvoyait une seule valeur
    Et ton exemple ne me renvoie pas le texte de la ligne mais des chiffres qui doivent sûrement correspondre au numéro de lignes...

    à force de buter dessus, je vois plus...

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 354
    Points : 15 700
    Points
    15 700
    Par défaut
    Citation Envoyé par blueice Voir le message
    à force de buter dessus, je vois plus...
    si c'est juste ça, tu trouvera tout seul demain après une bonne nuit

    si ce n'est pas le cas, montre nous le code de la boucle pour qu'on voit comment tu veux utiliser le résultat de la fonction "cles"

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par blueice Voir le message
    J'avais déjà essayé mais ça me renvoyait une seule valeur
    Si tu as juste remplacé echo par return, c'est normal : la fonction s'arrête dès qu'elle rencontre cette instruction pour renvoyer le résultat...

    Citation Envoyé par blueice Voir le message
    Et ton exemple ne me renvoie pas le texte de la ligne mais des chiffres qui doivent sûrement correspondre au numéro de lignes...
    En effet, j'ai fait ça un peu vite
    Pour récupérer le texte des lignes, tu as plusieurs solutions :
    - concaténer tes lignes dans une autre variable avant de retourner le résultat à la fin,
    - faire un array_flip sur les clés trouvées au hasard, puis un array_intersect_key pour récupérer un tableau des lignes sélectionnées avant de faire un implode,
    - faire un shuffle au lieu d'un array_rand puis un array_slice pour ne récupérer que 100 éléments avant implode
    ...

  6. #6
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Merci pour ces tuyaux, je vais tester...

  7. #7
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    le premier truc sera de savoir ce quel sont les types d'objets affichés
    ensuite, comme le dit euseube, une fonction avec un return c'est mieux

    le traitement php tu peux le faire n'importe où, mais l'affichage ça il serait préférable de le centraliser

  8. #8
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Bon je teste ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $trimmed = file('texte.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    shuffle($trimmed);
    array_slice($trimmed, 0, 10, TRUE);
    foreach($trimmed as $cle) {
    echo $cle.', ';
    }
    Il me renvoie bien un résultat dans le désordre mais pas tronquer, il semble que array_slice ne fonctionne pas, dans ce contexte.
    Une idée ?

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 354
    Points : 15 700
    Points
    15 700
    Par défaut
    "array_slice" ne modifie pas le tableau, essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $trimmed = file('texte.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    shuffle($trimmed);
    echo implode(', ', array_slice($trimmed, 0, 10, TRUE));

  10. #10
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Ca marche merci :-)

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

Discussions similaires

  1. [AJAX] variable de fonction dans une boucle
    Par Hurin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/06/2008, 09h51
  2. Réponses: 11
    Dernier message: 21/03/2008, 12h24
  3. Changer un paramètre de fonction dans une boucle
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 24/01/2008, 14h23
  4. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  5. Réponses: 10
    Dernier message: 07/01/2007, 12h03

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