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 :

Postionner l'attribut checked sur des tableaux de checkbox


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Postionner l'attribut checked sur des tableaux de checkbox
    Bonjour,

    Il me faut positionner l'attribut checked sur plusieurs checkboxes.
    Voici mon code d'essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $var = 5; // peut prendre des valeurs de 1 à 15 par addition de 1, 2, 4 ou 8.
    for ($i=1; $i<5; $i++)
    {
    	echo __line__, ': ', $i, ' ', $var<<$i, ' ', $var<<$i & $i, '<br/>';
    	$checked[$i] = ( $var << $i & $i ) ? ' checked': '';
    }
    print_r($checked);echo '<br/>';
    Déjà, je ne comprends pas pourquoi $var<<$i de la ligne 4 me renvoie 10, 20, 40, 80 au lieu de 1, 2, 4, 8.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    un peu de lecture par ici, regarde bien les priorités.
    Ensuite, pour quoi utilises-tu les opérations sur les bits pour un cas aussi trivial ? C'est obligé ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Si je remplace ma ligne 5 par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $checked[$i] = ( ($var << $i) & $i ) ? ' checked': '';
    j'ai toujours 10, 20, 40, 80 au lieu de 1, 2, 4, 8. Pourquoi? Il faudrait déjà que je résolve ce problème.

    J'utilise les opérations sur les bits parce que c'est ce qui me paraît le plus simple. Sinon, je serais obligé de tester 15 cas différents. C'est aussi plus universel si le nombre de checkboxes augmente.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    prends un de tes cas et traite à la main, vois par toi même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // on convertit 5 en binaire 
    $cinq = sprintf('%04d', decbin(5));  // 0101
     
    // première rotation à gauche 
    $rot1 = 5 << 1;  // 0101 -> 1010
     
    // on convertit le résultat binaire obtenu en décimal : 
    $dec = bindec('1010');  // $dec = 10
     
    // ensuite tu fais un bitwise avec 1 qui en décimal vaut 0001
    // 1010 & 0001 => 0000
    Fais le test avec tes autres valeurs et tu verras que cela fonctionne très bien. Aucune valeur n'est cochée pour le coup ^^

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Exprimé en base décimal:
    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5 << 1 = 5 x 2^1 = 5 x 2 = 10
    5 << 2 = 5 x 2^2 = 5 x 4 = 20
    5 << 3 = 5 x 2^3 = 5 x 8 = 40
    5 << 4 = 5 x 2^4 = 5 x 16 = 80
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Merci à vous deux.
    Finalement (la nuit porte conseil), j'ai trouvé une solution qui tient en peu de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $var = 7 // par exemple
    for ($i=0; $i<4; $i++)
    {
    	$checked[$i] = ( $var & (2**$i) ) ? ' checked': '';
    }

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

Discussions similaires

  1. [POO] Erreur sur des tableaux en POO
    Par Xavier44214 dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2007, 16h26
  2. permutations/combinaisons sur des tableaux dynamiques
    Par pEAk230 dans le forum Langage
    Réponses: 5
    Dernier message: 19/04/2006, 13h18
  3. [Eval] Problème de boucle for sur des tableaux
    Par battle_benny dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/01/2006, 23h55
  4. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  5. free sur des tableaux "a moitié dynamiques"
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 31/07/2003, 15h30

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