Accumuler signes !=

Eléphant du PHP | 124 Messages

07 nov. 2007, 03:44

Salut,

Soit 3 nombres (pour faire simple) compris entre 2 et 14 (2<=$<=14)
$a=5;
$b=7;
$c=14;
J'aimerai pouvoir faire un if disant si les 3 variables sont toutes différentes :
if ($a!=$b!=$c)
{

}
Mais il falait s'en douter cela ne fonctionne pas

Donc j'ai trouvé ce moyen :
if ($a!=$b AND $a!=$c AND $b!=$c)
{

}
La deuxième solution fonctionne mais le problème c'est qu'au lieu d'avoir 3 variables j'en ai 7.

Donc existe il un moyen plus court de faire la meme chose ?

J'ai pensé classer les variables par ordre croissante mais je ne sais pas comment faire, mais j'ai pas encore cherché (si vous pensez que c'est la meilleure solution dites le moi) :wink:

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:10, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 nov. 2007, 04:40

Tu mets tes variables dans un tableau et tu utilises la fonction array_unique() pour éliminer les doublons, et si c'est fait ça veut dire que les variables ne sont pas différentes.
<?php
$variables = array ("a" => 2,  "b" =>5, "c"=>2, "d"=>5); //exemple
$uniques = array_unique ($variables);
if (count($variables ) != count($uniques)) { //si le nombre de cases du tableau de base a changé : doublons éliminés
                 echo "variables non différentes! Les doublons trouvés sont : ";
                 print_r( array_diff_uassoc($variables, $uniques, 'key_compare_func')); //trouver les doublons éliminés précédemment
}
else {   echo "variables différentes"; }

//fonction appelée par array_diff_uassoc pour comparer aussi les clés du tableau
function key_compare_func($key1, $key2) {
    if ($key1 === $key2) return 0;
    return ($key1 > $key2)? 1:-1;
}
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 nov. 2007, 10:32

La deuxième solution fonctionne mais le problème c'est qu'au lieu d'avoir 3 variables j'en ai 7.
Je ne comprend pas cette phrase :-k
Même si tu écrit 2 fois chaque variable, tu as en que 3 :?

Je pense que tu crois optimiser ton script en ne faisant pas ces 3 tests alors que ça me semble être la solution la plus rapide ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 124 Messages

07 nov. 2007, 11:12

La deuxième solution fonctionne mais le problème c'est qu'au lieu d'avoir 3 variables j'en ai 7.
Je ne comprend pas cette phrase :-k
Même si tu écrit 2 fois chaque variable, tu as en que 3 :?

Je pense que tu crois optimiser ton script en ne faisant pas ces 3 tests alors que ça me semble être la solution la plus rapide ;)
Ce que je veux dire c'est que j'ai simplifié mon exemple en prenant que 3 variables, mais dans mon script j'ai 7 variables :

$a
$b
$c
$d
$e
$f
$g

Et j'ai pas trop envi de faire des if à ralonge.

--------

Merci sadeq je vais étudier ce que tu m'as donné.
Modifié en dernier par neo765 le 29 mai 2008, 23:10, modifié 1 fois.

ViPHP
ViPHP | 4039 Messages

07 nov. 2007, 11:38

le script de sadeq marche avec un nombre virtuellement illimité de variables.. ça devrait pouvoir le faire non ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 nov. 2007, 11:59

La solution de sadeq répond effectivement à ton problème, maintenant tu n'en as pas exprimé le contexte. S'il s'agit d'un tirage aléatoire, il y a des solutions plus simples pour tirer 7 nombres au hasard et sans doublon et éviter ainsi d'avoir à les tester ensuite... (cf. les scripts de loto par exemple)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 124 Messages

07 nov. 2007, 14:49

Il s'agit en faite d'un script pour donner les mains au poke r :

Si 2 variables sont identiques on a un paire
Si aucune variable n'est identique, le joueur à alors une carte forte
Si 3 variables sont identiques on a un brelan

etc...

Et il possible de classer les variables par ordre croissante avec un array, ça serai plus simple non ?
Modifié en dernier par neo765 le 29 mai 2008, 23:11, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 nov. 2007, 15:00

hmm.. un fan de texas hold'em hein ;)

Tu peux classer les valeurs d'un tableau avec la fonction sort(). Ce sera effectivement beaucoup plus simple pour y détecter une quinte :)

Mais par contre il va te manquer la notion de couleur...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 124 Messages

07 nov. 2007, 16:24

hmm.. un fan de texas hold'em hein ;)

Tu peux classer les valeurs d'un tableau avec la fonction sort(). Ce sera effectivement beaucoup plus simple pour y détecter une quinte :)

Mais par contre il va te manquer la notion de couleur...
Les cartes sont issus d'un base de données :
- Le nom (de 2 pour le 2 à 14 pour l'as)
- La couleur (1 pour coeur, 2 pour pique etc...)

SELECT nom, couleur FROM cartes ORDER BY RAND() LIMIT $nb_carte

Ainsi j'ai la valeur de la carte avec sa couleur.

Je m'informe sur la fonction sort() et je vous tiens au courant.

Meric bien
Modifié en dernier par neo765 le 29 mai 2008, 23:11, modifié 1 fois.

Eléphant du PHP | 124 Messages

07 nov. 2007, 19:03

Alors j'ai testé le sort() :
$matrice = array("$carte_1","$carte_2","$carte_3","$carte_4","$carte_5","$carte_6","$carte_7");
sort ($matrice);
foreach ($matrice as $key => $val) {
echo "$val<br>";
}
Sauf que j'arrive pas à faire un if dans la boucle, serait il possible d'avoir en sortie :

$var1 pour la carte la plus faible
$var2 pour la 2ème carte etc...

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:11, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 nov. 2007, 11:09

Regarde du côté de la fonction list(). Maintenant, sachant qu'une fois ton tableau trié par ordre croissant, $tonTableau[0] contient la valeur la plus faible, $tonTableau[1] la suivante, ... jusqu'à $tonTableau[6] la plus forte, c'est peut être pas utile ? :)

Par ailleurs, il est inutile d'encapsuler des variables dans des chaines pour utiliser ces variables (sortez vos variables !!! Image). Ajouter des guillemets empêche php d'utiliser directement la valeur. Il est obligé de parser la chaine, constater qu'elle contient une variable, aller chercher la valeur associée et reconstituer la chaine avec la valeur trouvée au lieu de la retourner direcetment...
$matrice = array ($carte_1,$carte_2,$carte_3,$carte_4,$carte_5,$carte_6,$carte_7); 
Ton code sera plus lisible et php travaillera (un peu) plus rapidement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 124 Messages

12 nov. 2007, 19:34

$matrice = array("$carte_1","$carte_2","$carte_3","$carte_4","$carte_5","$carte_6","$carte_7");
sort ($matrice);
foreach ($matrice as $key => $val) {
'$carte'$key=$val;
}
Quand je vais ça, ça ne fonctionne pas.

:cry:
Modifié en dernier par neo765 le 29 mai 2008, 23:11, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 nov. 2007, 20:42

Modération :
neo765, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 124 Messages

14 nov. 2007, 00:52

personne ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 nov. 2007, 10:31

Modération :
neo765, les "up" sont interdits sur PHPFrance.

Merci de prendre le temps de lire les règlements.



Quant à ton code '$carte'$key, la syntaxe "chaine contre variable" n'existe pas. Si tu veux créer un nom de variable dynamiquement il faut spécifier entre accolade la chaine à utiliser pour constituer le nom de la variable :
${'carte_' . $key} = $val;
Cette façon de procéder est spécifiée dans la documentation php, dans les forums de phpfrance, et très probablement - mais je ne l'ai pas vérifié - dans la FAQ. Une petite recherche t'aurais évitée de perdre une journée et d'être mal vu en faisant un UP ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...