{"id":1093,"date":"2017-03-03T12:06:11","date_gmt":"2017-03-03T10:06:11","guid":{"rendered":"http:\/\/www.lafabriquedecode.com\/blog\/?p=1093"},"modified":"2017-03-03T12:28:00","modified_gmt":"2017-03-03T10:28:00","slug":"php-7-tri-avec-operateur-spaceship%e2%80%8b","status":"publish","type":"post","link":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/","title":{"rendered":"PHP 7: Un tri(vial) avec l&rsquo;op\u00e9rateur combin\u00e9 spaceship"},"content":{"rendered":"<p>Si vous \u00eates au courant des quelques nouveaut\u00e9s &#8211; plus si nouvelles que \u00e7a d&rsquo;ailleurs &#8211; de PHP 7, cet op\u00e9rateur combin\u00e9 au nom amusant ne vous est pas inconnu ! Ce spaceship, cens\u00e9 imiter la forme des TIE Fighters de Star Wars, est utilis\u00e9 pour effectuer des comparaisons. Cet op\u00e9rateur existe d\u00e9j\u00e0 depuis longtemps en Ruby, avec lequel je travaille \u00e9galement. PHP emprunte ce qu&rsquo;il y a de meilleurs \u00e0 ses concurrents depuis des ann\u00e9es et c&rsquo;est tr\u00e8s bien ainsi ! Peut-\u00eatre sera-t-il un jour fortement typ\u00e9 ? Je digresse&#8230;<\/p>\n<p><div id=\"attachment_1094\" style=\"width: 353px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2017\/03\/AAEAAQAAAAAAAA19AAAAJGVhNjJiMDVhLWQ0NTMtNDQ0Zi05OTE1LWVkZmJhZDRiNmI4Zg.png\"><img aria-describedby=\"caption-attachment-1094\" loading=\"lazy\" src=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2017\/03\/AAEAAQAAAAAAAA19AAAAJGVhNjJiMDVhLWQ0NTMtNDQ0Zi05OTE1LWVkZmJhZDRiNmI4Zg.png\" alt=\"TIE Fighter \" width=\"343\" height=\"261\" class=\"size-full wp-image-1094\" srcset=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2017\/03\/AAEAAQAAAAAAAA19AAAAJGVhNjJiMDVhLWQ0NTMtNDQ0Zi05OTE1LWVkZmJhZDRiNmI4Zg.png 343w, http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2017\/03\/AAEAAQAAAAAAAA19AAAAJGVhNjJiMDVhLWQ0NTMtNDQ0Zi05OTE1LWVkZmJhZDRiNmI4Zg-300x228.png 300w\" sizes=\"(max-width: 343px) 100vw, 343px\" \/><\/a><p id=\"caption-attachment-1094\" class=\"wp-caption-text\">\u00ab\u00a0Votre manque de typage me consterne\u00a0\u00bb<\/p><\/div><br \/>\nRevenons \u00e0 notre \u00ab\u00a0vaisseau spatial\u00a0\u00bb&#8230;Son r\u00f4le est de comparer deux valeurs: 0 est renvoy\u00e9 si elles sont \u00e9gales, 1 si la valeur \u00e0 gauche est la plus grande et -1 dans le cas contraire. Il nous \u00e9vite d&rsquo;avoir \u00e0 \u00e9crire ce genre de one-liner peu rago\u00fbtant:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">$ret = ($a === $b ? 0 : ($a &gt; $b ? 1: -1));<\/pre>\n<p>Nous allons l&rsquo;utiliser dans un cas assez trivial, celui d&rsquo;un tri effectu\u00e9 \u00e0 l&rsquo;aide de la fonction usort. Je dis trivial car au final, on aurait pu utiliser sort et le r\u00e9sultat aurait \u00e9t\u00e9 le m\u00eame. Le but ici est de s&rsquo;amuser un peu avec les nouveaut\u00e9s PHP 7 et notamment le STH (Scalar Type Hinting), dont j&rsquo;ai d\u00e9j\u00e0 parl\u00e9 <a href=\"http:\/\/www.lafabriquedecode.com\/blog\/2015\/10\/php-7-les-types-de-retour\/\">ici<\/a> en 2015.<\/p>\n<p>La fonction usort trie les \u00e9l\u00e9ments d&rsquo;un tableau en leur appliquant la fonction de tri que vous avez d\u00e9fini. C&rsquo;est dans cette derni\u00e8re que nous allons faire usage du spaceship. Attention toutefois, elle doit obligatoirement retourner une valeur de type entier, sinon le r\u00e9sultat risque de vous d\u00e9cevoir&#8230;Notez aussi qu&rsquo;usort trie votre tableau en place, c&rsquo;est \u00e0 dire qu&rsquo;il le modifie (passage par r\u00e9f\u00e9rence dans la liste des param\u00e8tres de la fonction) et n&rsquo;en g\u00e9n\u00e8re pas un nouveau.<\/p>\n<p>Voici ce que donne le code, en faisant usage des pratiques PHP 7:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n\r\n$tableau = array (10, 6, 12, 0, 687, 10, 6, 238, -6);\r\n\r\nfunction compare(int $a, int $b) : int {\r\n  return $a &lt;=&gt; $b;\r\n}\r\n\r\nusort($tableau,'compare');\r\n\r\nprint_r($tableau);\r\n<\/pre>\n<p>J&rsquo;avais dit \u00ab\u00a0trivial\u00a0\u00bb&#8230;je n&rsquo;ai pas menti ! En r\u00e9alit\u00e9 on utilise plut\u00f4t usort quand le tri a effectuer est assez complexe, avec par exemple des tableaux associatifs, mais ceci est une autre histoire&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous \u00eates au courant des quelques nouveaut\u00e9s &#8211; plus si nouvelles que \u00e7a d&rsquo;ailleurs &#8211; de PHP 7, cet op\u00e9rateur combin\u00e9 au nom amusant ne vous est pas inconnu ! Ce spaceship, cens\u00e9 imiter la forme des TIE Fighters de Star Wars, est utilis\u00e9 pour effectuer des comparaisons. Cet op\u00e9rateur existe d\u00e9j\u00e0 depuis longtemps [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[88],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.6.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 7: Un tri(vial) avec l&#039;op\u00e9rateur combin\u00e9 spaceship - La Fabrique de code - Tech blog<\/title>\n<meta name=\"description\" content=\"Utilisation de l&#039;op\u00e9rateur spaceship de PHP 7 pour effectuer un tri tout simple avec la fonction usort.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship\u200b\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 7: Un tri(vial) avec l&#039;op\u00e9rateur combin\u00e9 spaceship - La Fabrique de code - Tech blog\" \/>\n<meta property=\"og:description\" content=\"Utilisation de l&#039;op\u00e9rateur spaceship de PHP 7 pour effectuer un tri tout simple avec la fonction usort.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship\u200b\/\" \/>\n<meta property=\"og:site_name\" content=\"La Fabrique de code - Tech blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-03T10:06:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-03-03T10:28:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2017\/03\/AAEAAQAAAAAAAA19AAAAJGVhNjJiMDVhLWQ0NTMtNDQ0Zi05OTE1LWVkZmJhZDRiNmI4Zg.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:site\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/\",\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/\",\"name\":\"PHP 7: Un tri(vial) avec l'op\u00e9rateur combin\u00e9 spaceship - La Fabrique de code - Tech blog\",\"isPartOf\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\"},\"datePublished\":\"2017-03-03T10:06:11+00:00\",\"dateModified\":\"2017-03-03T10:28:00+00:00\",\"author\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\"},\"description\":\"Utilisation de l'op\u00e9rateur spaceship de PHP 7 pour effectuer un tri tout simple avec la fonction usort.\",\"breadcrumb\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.lafabriquedecode.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP 7: Un tri(vial) avec l&rsquo;op\u00e9rateur combin\u00e9 spaceship\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\",\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/\",\"name\":\"La Fabrique de code - Tech blog\",\"description\":\"PHP objet, MySQL, Design Patterns, OOP...et plus !\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"caption\":\"admin\"},\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP 7: Un tri(vial) avec l'op\u00e9rateur combin\u00e9 spaceship - La Fabrique de code - Tech blog","description":"Utilisation de l'op\u00e9rateur spaceship de PHP 7 pour effectuer un tri tout simple avec la fonction usort.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship\u200b\/","og_locale":"fr_FR","og_type":"article","og_title":"PHP 7: Un tri(vial) avec l'op\u00e9rateur combin\u00e9 spaceship - La Fabrique de code - Tech blog","og_description":"Utilisation de l'op\u00e9rateur spaceship de PHP 7 pour effectuer un tri tout simple avec la fonction usort.","og_url":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship\u200b\/","og_site_name":"La Fabrique de code - Tech blog","article_published_time":"2017-03-03T10:06:11+00:00","article_modified_time":"2017-03-03T10:28:00+00:00","og_image":[{"url":"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2017\/03\/AAEAAQAAAAAAAA19AAAAJGVhNjJiMDVhLWQ0NTMtNDQ0Zi05OTE1LWVkZmJhZDRiNmI4Zg.png"}],"author":"admin","twitter_card":"summary","twitter_creator":"@LaFabrique2Code","twitter_site":"@LaFabrique2Code","twitter_misc":{"\u00c9crit par":"admin","Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/","url":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/","name":"PHP 7: Un tri(vial) avec l'op\u00e9rateur combin\u00e9 spaceship - La Fabrique de code - Tech blog","isPartOf":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website"},"datePublished":"2017-03-03T10:06:11+00:00","dateModified":"2017-03-03T10:28:00+00:00","author":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162"},"description":"Utilisation de l'op\u00e9rateur spaceship de PHP 7 pour effectuer un tri tout simple avec la fonction usort.","breadcrumb":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.lafabriquedecode.com\/blog\/2017\/03\/php-7-tri-avec-operateur-spaceship%e2%80%8b\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.lafabriquedecode.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP 7: Un tri(vial) avec l&rsquo;op\u00e9rateur combin\u00e9 spaceship"}]},{"@type":"WebSite","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website","url":"http:\/\/www.lafabriquedecode.com\/blog\/","name":"La Fabrique de code - Tech blog","description":"PHP objet, MySQL, Design Patterns, OOP...et plus !","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162","name":"admin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/","url":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","contentUrl":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","caption":"admin"},"url":"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/1093"}],"collection":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/comments?post=1093"}],"version-history":[{"count":5,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/1093\/revisions"}],"predecessor-version":[{"id":1099,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/1093\/revisions\/1099"}],"wp:attachment":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/media?parent=1093"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/categories?post=1093"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/tags?post=1093"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}