bonjour j'aimerais bien savoir est ce que c'est possible de faire un filtre en PHP
ou bien HTML ou bien autre pour faire un filtre par exemple
jai une liste des numeros et je veux le mettre dans le filtre pour extraire seulement les numeros qui sont composé de 8 chiffres Smiley smile est ce que c possible !
LIST example :
12345678
123456
120056
12300678
12300679
12300671
1230067
result example :
12300678
12300679
12300671
12345678
Modérateur
Hello,

Je vois plusieurs manières pour arriver à tes fins. Une solution au hasard :

<?php
    
    //génération des nombres compris entre 7 chiffres et 9 chiffres
    $listNumber = [];

    for($i = 0; $i < mt_rand(10,50); $i++){
        $listNumber[] = mt_rand(1000000, 100000000);        
    }

    //filtres pour en extraire les items à 8 chiffres
    function get8number($x){
        settype($x, 'string');
        return  strlen($x) === 8;
    }
    $listNumber = array_filter($listNumber, "get8number"); //ecrit en php5. Si php 5.6+ autant utiliser lambda function

    echo "<pre>";
    print_r($listNumber);
    echo "</pre>";
?>

Modifié par niuxe (23 Dec 2017 - 14:58)
niuxe a écrit :
Hello,
Je vois plusieurs manières pour arriver à tes fins. Une solution au hasard :

&lt;?php
    
    //génération des nombres compris entre 7 chiffres et 9 chiffres
    $listNumber = [];

    for($i = 0; $i &lt; mt_rand(10,50); $i++){
        $listNumber[] = mt_rand(1000000, 100000000);        
    }

    //filtres pour en extraire les items à 8 chiffres
    function get8number($x){
        settype($x, 'string');
        return  strlen($x) === 8;
    }
    $listNumber = array_filter($listNumber, "get8number"); //ecrit en php5. Si php 5.6+ autant utiliser lambda function

    echo "<pre>";
    print_r($listNumber);
    echo "</pre>";
?&gt;

Je préfère a priori cette approche :
return $x > 9999999 & $x <= 99999999;

Évite la conversion en chaîne de caractères et l'appel de la fonction strlen.
merci davoir repondre mais tu ma pas bien compris enfaite le truc ce que je veux c voila une screen pour bien comprendre : https://prnt.sc/hre9xn voila un form ou je vais mettre une liste comme ca :
12345678
123455
1245625
162671762
16267176
162671
16
16267
et le filtre va me faire une nouvelle list qui contient seulement les lignes qui compose de 8 chiffres la result sera comme ca :
12345678
16267176
> parce que c les seuls ligne qui contient 8 chiffres ^^jaimerais bien avoir la solution
kyron900 a écrit :
merci davoir repondre mais tu ma pas bien compris enfaite le truc ce que je veux c voila une screen pour bien comprendre : https://prnt.sc/hre9xn voila un form ou je vais mettre une liste comme ca :
12345678
123455
1245625
162671762
16267176
162671
16
16267
et le filtre va me faire une nouvelle list qui contient seulement les lignes qui compose de 8 chiffres la result sera comme ca :
12345678
16267176
&gt; parce que c les seuls ligne qui contient 8 chiffres ^^jaimerais bien avoir la solution

Que ce soit la solution de Niuxe ou la mienne, elles répondaient toutes deux à la question telle que tu l'as posée... et désolé mais ta dernière réponse et ta copie d'écran n'éclairent en rien ce que tu veux exactement.
Il y a une règle d'or en informatique : exprimer clairement le besoin.
Alors fais un effort pour nous pondre un descriptif exact et précis de ce que tu veux obtenir.
Telle que c'est rédigé, on comprend que tu as une liste de nombre en entrée et que tu veux en extraire ceux ayant très exactement huit chiffres. Si ton besoin est différent, merci de bien vouloir l'expliciter clairement.
je veux une form que le exemplaire ou je vais mettre la LIST DES CHIFFRES et je click sur la button submit pour avoir un nouveau form avec les numeros filter je vois ce que je cherche
parce que dans ton code jai coller et executer sur le localhost mais ca me donne pas une place pour mettre la list des numers et filter les lignes qui contient seulement 8 chiffres dans un nouveau forme
kyron900 a écrit :
je veux une form que le exemplaire ou je vais mettre la LIST DES CHIFFRES et je click sur la button submit pour avoir un nouveau form avec les numeros filter je vois ce que je cherche

kyron900 a écrit :
parce que dans ton code jai coller et executer sur le localhost mais ca me donne pas une place pour mettre la list des numers et filter les lignes qui contient seulement 8 chiffres dans un nouveau forme

C'est un gag ?
Sinon, m'est avis que tu dois d'abord te diriger vers les tutoriels de base traitant de HTML / javascript et autres parce que là faut avouer qu'il y a du boulot.
Tu as de la chance, c'est la période de Noël... mets un gros soulier devant le sapin, on ne sait jamais.
Modérateur
sepecat a écrit :

return $x > 9999999 & $x<= 99999999;


Ne fonctionnera pas..... Sûrement warning ou fatal error.....

Au passage, de mon côté :
- j'ai pensé à ta solution, mais (voir ci-dessous)
- je sais que je suis moins performant, mais bon ça se voit en milliseconde, voir microseconde....
- c'est lisible (!),
- ça fonctionne....,
- il y a pas d’ambiguïté, (le jour où on fait un changement du nombre de chiffres, c'est largement plus simple)
- renvoie de toute manière un integer Smiley cligne (tu peux vérifier en faisant un var_dump)
- Quelque part on s'en fout que ce soit un integer ou string, c'est pour un form et php est un langage à typage faible.

Smiley biggol

<?= '7' * 6; ?>


kyron900 a écrit :
je veux une form ....


Smiley hum

@kyron900 : Tu n'as qu'à lire notre code ! Ici, on aide et on ne file pas de code prêt à l'emploi (on ne fait pas ton travail à ta place Smiley nono ). Règle 5 du forum.

Si tu as fait un effort de créer ton propre code, les membres du forum peuvent le corriger. Si tu ne sais pas faire (ce qui est parfois possible (on ne sait pas par quoi commencer et connaître le tenant et aboutissant)), tu es alors aiguillé sur la marche à suivre.

Si tu n'es pas capable de nous lire, je t'invite à lire ou relire les tutos sur php.
Modifié par niuxe (23 Dec 2017 - 22:02)
Modérateur
Bonjour,
sepecat a écrit :
return $x > 9999999 & $x<= 99999999;

niuxe a écrit :
Ne fonctionnera pas..... Sûrement warning ou fatal error.....

Ce problème n'est pas si facile que ça.

Curieusement, il semble que la solution de sepecat fonctionne sans erreur et done le résultat correct sauf dans le cas où au départ $x est une chaine de caractères commençant par un "0".

L'opérateur "&" utilisé avec des booléens (false et true) les transforme en entiers (0 et 1) puis donne un résultat équivalent à l'opérateur "&&" utilisé avec ces mêmes booléens.

Ceci étant, je préfèrerais ici comme niuxe faire un strlen($x) avec $x transformé en une chaine de caractères si nécessaire.

On notera cependant que si un numéro est au départ sous forme d'entier supérieur à PHP_INT_MAX, il est transformé en notation exponentielle avant d'être transformé en chaine de caractères. Par exemple, un 1 suivi de cent 0 sera noté 1.0E+100 qui fait ... 8 caractères : pas de bol ! Smiley cligne

Amicalement,
Modifié par parsimonhi (24 Dec 2017 - 00:17)
Modérateur
parsimonhi a écrit :
Bonjour,


Ce problème n'est pas si facile que ça.

Curieusement, il semble que la solution de sepecat fonctionne sans erreur et done le résultat correct sauf dans le cas où au départ $x est une chaine de caractères commençant par un "0".

L'opérateur "&" utilisé avec des booléens (false et true) les transforme en entiers (0 et 1) puis donne un résultat équivalent à l'opérateur "&&" utilisé avec ces mêmes booléens.

Ceci étant, je préfèrerais ici comme niuxe faire un strlen($x) avec $x transformé en une chaine de caractères si nécessaire.

On notera cependant que si un numéro est au départ sous forme d'entier supérieur à PHP_INT_MAX, il est transformé en notation exponentielle avant d'être transformé en chaine de caractères. Par exemple, un 1 suivi de cent 0 sera noté 1.0E+100 qui fait ... 8 caractères : pas de bol ! Smiley cligne

Amicalement,


Bien vu parsimonhi Smiley smile

Quand j'ai lu son code, je me suis dit que ça ne fonctionnerait pas. Je n'ai pas du tout pensé à l'opérateur binaire. Mea culpa Smiley smile

parsimonhi a écrit :
pas de bol !

Bah si, en sortie c'est un bolean Smiley lol
....
....
Smiley biggol
niuxe a écrit :
Ne fonctionnera pas..... Sûrement warning ou fatal error.....

Bin si...
Comme je l'ai indiqué plusieurs fois sur le forum, PHP n'est pas mon langage habituel aussi ai-je pris la peine de tester le bout de code en question sur phptester avant d'en reporter le résultat sur ledit forum.
Ni erreur, ni warning... d'où je conclus que :
- soit le site en question a un fonctionnement erratique
- soit la solution est viable
Quoi qu'il en soit, je suis parti du postulat adopté précédemment pour l'exemple, à savoir des valeurs numériques en entrée générées de façon aléatoire.
En Java, j'adopterais la même approche.
Pour le cas où les valeurs en entrée se trouveraient être de type alphanumérique, un Integer.parseInt() dans ce langage permet d'adapter ladite solution qui demeure pérenne.
Le seul cas où il faudrait réécrire le code est si le besoin évolue et qu'on ne parle plus de huit chiffres... Mais dans le cas présent, et bien que l'auteur du message initial soit des plus confus, il s'agissait bien de cette contrainte.