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 :

Afficher le chiffre le plus proche de 0


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut Afficher le chiffre le plus proche de 0
    Bonsoir;

    J 'ai un fichier txt ou je recup les distances voici la structure du fichier txt


    ==============================================
    174 , 5275 , 929 , 5275 , 156 , 169 , 5275 , 341
    ==============================================
    ce sont des distances je voudrais afficher dans mon script que le plus petit ici 156

    Voici le script de recup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    <?php
     
    $fp = fopen("dist.txt", "r");
    $dist=fread($fp,2000);fclose($fp);
     
    ?
    ?
    ?
     
    echo("le plus petit");  ???
     
    ?>

    Voila la je ne sais pas faire : si je trouve un chiffre le plus proche de zero alors afficher ce chiffre

    j 'ai essayé avec des split et autre mais rien afaire


    Cordialement

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Afficher le chiffre le plus proche de 0
    J'aurais tendance à dire


    Plus sérieusement,
    j 'ai essayé avec des split et autre mais rien afaire
    Montre-nous ce que tu as testé, on pourra te dire ce qui ne va pas...
    Parce qu'à priori, un str_split puis un sort devraient suffire...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    J'ai tendance à dire que c'est un cas d'école, le genre de truc qu'il est bon de trouver seul, sans aide, à part éplucher la doc de Php et les fonctions.

    En 1er je dirais si tu n'aurais pas la possibilité de (re)formater le contenu de dist.txt (donc dès sa création) en supprimant ce qui est inutile, comme les espaces, puis d'utiliser un séparateur plus conventionnel, comme le ; (point virgule).

    Pour obtenir une chaine comme : 174;5275;929;5275;156;169;5275;341


    Mise à par ça, on obtient en 1er cette chaine dans $dist.
    Appliquer un simple str_replace() pour supprimer ces espaces inutiles.
    Ensuite explode(',', $dist) pour stocker tous les chiffres dans un tableau.
    Enfin un sort($chiffres, SORT_NUMERIC) pour trier le tableau du plus petit au plus grand.
    Le 1er élément sera alors le nombre le plus petit.

    Il y a peut être plus simple, ou plus optimisé, c'est quasi certain.

    Si tu veux faire du Php, prends au moins le temps maitriser les fonctions de bases, sinon tu ne cesseras de demander de l'aide pour des choses franchement simples.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    Re , pour l 'instant j 'ai ceci

    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
     
     
    <?php
     
     
    $fp = fopen("dist.txt", "r");
    $dist=fread($fp,2000);fclose($fp);
     
     
     
    if(strstr($dist, ';;')) 
    $dist = str_replace(';;', '', $dist); 
     
     
    $str = "$dist";
     
    if(strstr($dist, ';;')) 
    $dist = str_replace(';;', '', $dist); 
     
     
    $arr1 = str_split($str,4);
     
    print_r($arr1);
    ce qui donne ceci

    ==========================================================
    Array ( [0] => 179; [1] => 535; [2] => 831; [3] => 851; [4] => 856; [5] => 849; [6] => 858; [7] => 834; [8] => 162; [9] => 605; [10] => 845; [11] => 562; [12] => 624; [13] => 641; [14] => 660; [15] => 710; [16] => 619; [17] => 669; [18] => 831; [19] => 615; [20] => 840; [21] => 701; [22] => 539; [23] => 551; [24] => 530; [25] => 834; [26] => 546; [27] => 708; [28] => 656; [29] => 520; [30] => 665; [31] => 706; [32] => 836; [33] => 846; [34] => 552; [35] => 660; [36] => 515; [37] => 525; [38] => 829; [39] => 835; [40] => 833; [41] => 833; [42] => 833; [43] => 830; [44] => 634; [45] => 535; [46] => 662; [47] => 659; [48] => 651; [49] => 644; [50] => 559; [51] => 576; [52] => 636; [53] => 637; [54] => 578; [55] => 682; [56] => 718; [57] => 658; [58] => 647; [59] => 696; [60] => 530; [61] => 520; [62] => 557; [63] => 521; [64] => 526; [65] => 697; [66] => 870; [67] => 618; [68] => 541; [69] => 845; [70] => 584; [71] => 630; [72] => 907; [73] => 881; [74] => 643; [75] => 644; [76] => 650; [77] => 727; [78] => 859; )

    =========================================================
    la suite a venir

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    C est bon j 'ai trouvé

    Voici le code si cela peut servir à qq


    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
     
     
    <?php
     
    //1 recup des données des distance en km
    $fp = fopen("donnees.txt", "r");
    $dist=fread($fp,2000);fclose($fp);
     
     
    //2 remplacement des ;;
    if(strstr($dist, ';;')) 
    $dist = str_replace(';;', '', $dist); 
     
    $str = "$dist";
     
    if(strstr($dist, ';;')) 
    $dist = str_replace(';;', '', $dist); 
     
    $arr1 = str_split($str,4);
     
     
     
     sort($arr1, SORT_NUMERIC); 
      print_r($arr1);
     
     
     
    ?>
    @+

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    RE,

    Une question encore,

    Je ne trouve pas le moyen d'ecrire le reultat de print_r($arr1); dans un fichier txt

    est ce possible ??


    cdt

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par loribac
    Je ne trouve pas le moyen d'ecrire le reultat de print_r($arr1); dans un fichier txt

    est ce possible ??
    En très peu de temps on t'as dit qu'il faut consulter la doc de Php, c'est la bible
    De plus elle est très bien faite, faut pas s'en priver.

    Mais encore, il y a le NET (moteur de recherche).
    Tu veux écrire dans un fichier et bien recherche avec ces termes et tu auras de multitudes réponses et solutions.

    Je t'assure qu'en procédant ainsi c'est largement plus efficace que t'a méthode qui n'est autre que de supposer que telle ou telle fonction ferait ceci ou cela car elle effectue déjà ça.
    Méthode franchement hasardeuse, que de temps perdu.


    Donc lit la doc pour cette fonction print_r().
    Question : est-ce qu'il est écrit quelque part quelle permettrait d'écrire dans un fichier ?

    Perso je lis ceci :
    Citation Envoyé par Doc Php
    [B]print_r() affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible.
    C'est écrit : affiche.
    Que je sache, affiche n'est pas l'équivalent (ou synonyme) de écrire, non ?


    Ton problème c'est que tu inventes ou/et interprètes les choses.
    Un langage de programmation ça ne s'invente pas, ça s'apprend
    Sauf erreur
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    un cas similaire a été traité récemment ici : Stocker valeur compteur de clics
    Voir le script de compteur.php : à adapter.

    Et aussi => FAQ PHP : ouverture/lecture/écriture... d'un fichier

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    bonjour et merci pour les liens jreaux62

    J 'ai donc étudié la doc php , mais la autre problème

    Je vais exposer le problème en espérant froisser personne .....


    Mon fichier txt : 130;176;175;967;93;141;136;135;142;194; fichier dist.txt


    Mon code

    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
     
     
    $fp = fopen("dist.txt", "r");
    $dist=fread($fp,2000);fclose($fp);
     
    if(strstr($dist, ';;')) 
    $dist = str_replace(';;', '', $dist); 
     
    $str = "$dist";
     
    if(strstr($dist, ';;')) 
    $dist = str_replace(';;', '', $dist); 
     
     
    $arr1 = str_split($str,4);
     
     
    print_r($arr1);
    Le résulta dans le tableau

    Array ( [0] => 130; [1] => 176; [2] => 175; [3] => 967; [4] => 93;1 [5] => 41;1 [6] => 36;1 [7] => 35;1 [8] => 42;1 [9] => 94; )

    Bon je comprend bien que tout viens de cette partie : $arr1 = str_split($str,4); et que cela viens du découpage de la chaîne mais je ne trouve pas d'explication a cela dans la doc ou même une autre fonction

    En m 'excusant d avance de la simplicité de ma question auprès des membres du forum

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    L'explication vient du fonctionnement de la fonction str_split() qui n'est pas adapté dans ton cas.

    D'ailleurs je t'avais suggéré la fonction explode() qui est plus simple à comprendre qui plus est, plus adapté (voit totalement).

    Je m'explique.
    La fonction str_split(), comme cela est décrit dans la doc, va découper la chaine selon un nombre de caractère défini en 2ème paramètre : ici tu as mis 4.

    Cette fonction ne tiens pas la route (mauvais choix de fonction) car les nombres que composent la chaine ont un nombre de caractères variables.
    Entre autre : 130 (3 caractères) et 93 (2 caractères).
    De plus, les ; (points virgules) sont encore présent (font partie de chaque nombre).

    Pourtant, ces ; sont là pour aider/faciliter la récupération de chaque nombre, ils ne sont pas là pour de la décoration.
    Ce sont des séparateur (ou délimiteurs), c'est ça "le truc" qu'il fallait (ou il faut) exploiter.


    La fonction explode a un fonctionnement radicalement différent (rien à voir même).
    Son fonctionnement tient compte d'un élément séparateur (ou délimiteur).
    La chaine, c'est à dire le contenu du fichier contient un séparateur : des points virgules ; (autant dire du pain béni).
    Ils y sont, faut juste les exploiter.
    C'est ça qui va permettre de récupérer chaque nombre, cela quelque soit le nombre de caractères (93 : 2 caractère, 575 : 3 caractères, etc ...).

    Faut pas chercher plus loin, plus compliqué.


    D'ailleurs, ce n'est pas pour rien qu'au début je t'avais suggéré de supprimer ces espaces superflus qui séparent chaque nombre, car des espaces sont des caractères à part entière.
    Non seulement ces espaces ne servent à rien, mais pire, ils fiches la zizanie.

    Donc je le répète à nouveau.
    Au lieu de se prendre la tête à appliquer la fonction str_replace() pour supprimer ces espaces qui embêtent plus qu'autre chose pour ne conserver que les ; et rien d'autre comme séparateur, le plus simple serait de revoir le code qui crée se fichier dist.txt à l'origine (quitte à le faire à la mano) en écrivant ces nombres sans espaces donc juste en les séparant avec des ; et uniquement.
    Si cela est fait il n'y aura plus besoin d'appliquer la fonction str_replace().
    On somme on se simplifie la vie (et le code par la suite).
    Ce point est juste une parenthèse.


    Si on revient à cette fonction explode(), on lui passe 2 informations (ou 2 paramètres) :
    - en 1er le séparateur -> ici le ;
    - La chaine ->$dist

    Un exemple en occultant le fichier (en partant de $dist)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $dist = '1;7894;23;456789123;97';
    $nombres = explode(';', $dist);
    print_r($nombre);
    ?>
    Devrait afficher : (soit chaque élément du tableau $nombres)
    1
    7894
    23
    456789123
    97
    On peu difficilement faire plus simple


    La doc de Php de la fonction : explode
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/09/2014, 17h05
  2. Trouver le chiffre le plus proche d'un autre
    Par crunchy63 dans le forum Général Python
    Réponses: 3
    Dernier message: 07/02/2013, 23h27
  3. Réponses: 2
    Dernier message: 25/09/2010, 09h38
  4. [C#] 3 chiffres ni plus ni moins
    Par niPrM dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/06/2004, 11h51
  5. Récupurer via une requête SQL la valeur la plus proche
    Par yoda_style dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/04/2004, 14h52

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