# Question php : \<=\>

**URL:** <https://www.debian-fr.org/t/question-php/88875>\
**Category:** Programmation\
**Tags:** script, php\
**Created:** [Septembre 28, 2023, 1:43 UTC](https://www.debian-fr.org/t/question-php/88875 "2023-09-28T13:43:19Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Septembre 28, 2023, 1:43 UTC](https://www.debian-fr.org/t/question-php/88875/1 "2023-09-28T13:43:19Z")

</div>

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](https://www.php.net/manual/en/function.usort)  
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](https://www.php.net/manual/fr/language.types.integer.php) 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 \<=\>

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 28, 2023, 2:34 UTC](https://www.debian-fr.org/t/question-php/88875/2 "2023-09-28T14:34:36Z")

</div>

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

> **Note** :
> 
> Obviously in this trivial case the [sort()](https://www.php.net/manual/en/function.sort.php) function would be more appropriate.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 28, 2023, 2:36 UTC](https://www.debian-fr.org/t/question-php/88875/3 "2023-09-28T14:36:10Z")

</div>

Bonjour

> [@dindoun](#):
>
> … je ne comprends pas pour quoi on ne peut pas simplement mettre \< plutot que \<=\>

Avec

```php
$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](https://www.php.net/manual/fr/function.usort.php) comme retour de fonction de comparaison.

> [@''https://www.php.net/manual/fr/function.usort.php''](#):
>
> …  
> Description
> 
> ```php
> usort(array &$array, callable $callback): true
> 
> ```
> 
> …  
> callback
> 
> La fonction de comparaison doit retourner un entier inférieur à, égal à, ou supérieur à 0 si le premier argument est considéré comme, respectivement, inférieur à, égal à, ou supérieur au second.  
> …

* * *

Tandis qu’avec, par exemple

```php
$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.

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Septembre 28, 2023, 9:54 UTC](https://www.debian-fr.org/t/question-php/88875/4 "2023-09-28T21:54:56Z")

</div>

> [@anon29980398](#):
>
> a fonction `usort` laisserait à leur place les valeurs qui ne seraient pas inférieures (d

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

---

<div class="post-metadata">

**Author:** ![Ksynet](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ksynet/32/12919_2.png) [@Ksynet](https://www.debian-fr.org/u/Ksynet)\
**Post date:** [Octobre 3, 2023, 6:08 UTC](https://www.debian-fr.org/t/question-php/88875/5 "2023-10-03T18:08:36Z")

</div>

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é.

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Octobre 3, 2023, 7:31 UTC](https://www.debian-fr.org/t/question-php/88875/6 "2023-10-03T19:31:23Z")

</div>

> [@Ksynet](#):
>
> on peut imaginer que ($a \<=\> $b) renvoie le signe de ($a-$b)

bon résumé, merci.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 4, 2023, 3:56 UTC](https://www.debian-fr.org/t/question-php/88875/7 "2023-10-04T15:56:47Z")

</div>

Bonjour

> [@Ksynet](#):
>
> … on peut imaginer que ($a \<=\> $b) renvoie le signe de ($a-$b) …

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 :

- `<=>` retoune `-1`, `0`, ou `1`
- tous les autres [opérateurs de comparaison PHP](https://www.php.net/language.operators.comparison) ne retournent que `TRUE` ou `FALSE` (boolean)

---

<div class="post-metadata">

**Author:** ![Ksynet](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ksynet/32/12919_2.png) [@Ksynet](https://www.debian-fr.org/u/Ksynet)\
**Post date:** [Octobre 4, 2023, 4:28 UTC](https://www.debian-fr.org/t/question-php/88875/8 "2023-10-04T16:28:02Z")

</div>

Hello  
J’ai bien dit «&nbsp; **pour se souvenir** &nbsp;».  
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.
