[PHP] Trier un tableau par valeur numérique descendante

Publié le 07/02/2020 • Mis à jour le 07/02/2020


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧

Dans ce bout de code nous allons voir comment trier un tableau PHP par valeur numérique descendante. C'est le genre de code que j'oublie parfois et ou j'ai besoin d'aller regarder la documentation pour voir comment faire. Je pensais d'abord qu'il fallait passer le flag SORT_NUMERIC à la fonction arsort mais ce n'est pas nécessaire si les valeurs sont des nombres correctement formatés.


<?php declare(strict_types=1);

// src/Controller/Snippet/Snippet76Trait.php

namespace App\Controller\Snippet;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet76Trait
{
    public function snippet76(): void
    {
        $myArray = [
            'orange' => 3,
            'lemon' => 1,
            'banana' => 5,
            'kiwi' => 11,
            'apple' => 2,
        ];

        print_r($myArray);
        arsort($myArray);
        print_r($myArray);

        // That's it! 😁
    }
}

 Exécuter le snippet  ≪ showUnitTestButtonLabel ≫  Plus sur Stackoverflow   Lire la doc  Lancer sur 3v4l.org

<?php declare(strict_types=1);

namespace App\Tests\Controller\Snippets;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

/**
 * @covers Snippet76Trait
 */
final class Snippet76Test extends KernelTestCase
{
    /**
     * @covers Snippet76Trait::snippet76
     */
    public function testSnippet76(): void
    {
        $myArray = [
            'orange' => 3,
            'lemon' => 1,
            'banana' => 5,
            'kiwi' => 11,
            'apple' => 2,
        ];
        arsort($myArray);
        $values = array_values($myArray);
        $this->assertSame(11, $values[0]);
        $this->assertSame(1, $values[count($myArray)-1]);
    }
}