Question php : <=>

Tags: #<Tag:0x00007f63f3e56bc8> #<Tag:0x00007f63f3e56ab0>

salut
je viens de faire un script php
le plus simple est de regarder le script que j’utilise :
exemple 3 de la page PHP: usort - Manual
c’est un tri d’objets
on y trouve la fonction de comparaison <=> qui marche très bien, mais je ne la connais pas ( return strtolower($a->name) <=> strtolower($b->name); )
quelqu’un peut m’éclairer?

j’ai trouvé ça :
$a <=> $b Combiné Un entier inférieur, égal ou supérieur à zéro lorsque $a est inférieur, égal, ou supérieur à $b respectivement.

mais je ne comprends pas pour quoi on ne peut pas simplement mettre < plutot que <=>

Bonjour,
Ceci dit, dans cet exemple, ils précisent:

Note :

Obviously in this trivial case the sort() function would be more appropriate.

Bonjour

Avec

$a <=> $b

on a, en une seule opération, le résultat des trois comparaisons suivantes :

Si le retour est -1, alors c’est que $a est inférieur à $b
Si le retour est 0, alors c’est que $a est égal à $b
Si le retour est 1, alors c’est que $a est supérieur à $b

et c’est bien ce qu’attends la fonction usort comme retour de fonction de comparaison.


Tandis qu’avec, par exemple

$a < $b

la fonction usort laisserait à leur place les valeurs qui ne seraient pas inférieures (donc, les valeurs qui seraient supérieures ou égales) ce qui fait que, dans certains cas, le tri ne serait pas fait.

tu veuxw dire que si le test est faux , donc $a>= $b il ne se passe rien ?
je pensais que $a prenait toutes les valeurs et $b toutes les valeurs ( au moins logiquement ) mais ça explique tout

merci beaucoup à vous deux

Bonsoir à tous.
L’opérateur <=> se comporte tout simplement comme toutes les fonctions/méthodes compare ou compareTo utilisées dans les algorithmes de tri.
Je pense que c’est un héritage du C.
Pour se souvenir de son fonctionnement, on peut imaginer que ($a <=> $b) renvoie le signe de ($a-$b) – avec 1 pour positif ($a>$b), -1 pour négatif ($a<$b) et 0 pour le signe de 0, i.e. l’égalité.

bon résumé, merci.

Bonjour

Cette analogie ne fonctionnerait que dans le cas où les opérandes seraient des valeurs numériques différentes, mais, si les opérandes sont des chaînes de caractères ou des tableaux, ou des objets, le résultat de la soustraction ne sera pas utilisable par usort()


La différence entre l’opérateur de comparaison <=> et tous les autres opérateurs de comparaison PHP c’est que :

Hello
J’ai bien dit « pour se souvenir ».
Dans tous les cas on peut faire une analogie avec des naturels, que ce soit des chaînes de caractères ou des tableaux : il suffit d’attribuer mentalement une valeur numérique à chacun des membres.
Mais je le répète, je ne donnais qu’un moyen mnémotechnique, en aucun cas une méthode substituable à l’opérateur.
Bonne soirée.