Tester si un tableau est une liste avec PHP

Publié le 10/09/2022 • Mis à jour le 10/09/2022


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 🇬🇧 Close

Dans ce bout de code, nous voyons comment tester si un tableau est une liste avec PHP. Cette fonction a été introduite dans PHP 8.1, avant, on devait manuellement le faire. Jetez un coup d'œil à la question StackOverflow pour plus de détails. Vous pouvez désormais trouver des snippets relatifs aux nouvelles fonctionnalités PHP 8.1 avec le tag PHP 8.1 tag. Veuillez noter que PHPStan analyse déjà les appels array_is_list() et lève un avertissement si ces appels sont inutiles, comme dans les tests unitaires suivants.


<?php

declare(strict_types=1);

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 Snippet218Trait
{
    public function snippet218(): void
    {
        $myList = [1, 2, 4, 8];

        var_dump($myList);
        var_dump(array_is_list($myList)); // @phpstan-ignore-line

        $myList['foo'] = 'bar'; // extra non numeric keys, the array is not a list anymore

        var_dump($myList);
        var_dump(array_is_list($myList)); // @phpstan-ignore-line

        // That's it! 😁
    }
}

 Exécuter le snippet  ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

<?php

declare(strict_types=1);

namespace App\Tests\Integration\Controller\Snippets;

use PHPUnit\Framework\TestCase;

/**
 * @see Snippet218Trait
 */
final class Snippet218Test extends TestCase
{
    /**
     * @see Snippet218Trait::snippet218
     */
    public function testSnippet218(): void
    {
        $myList = [1, 2, 4, 8];
        self::assertTrue(array_is_list($myList)); // @phpstan-ignore-line Yes PHPStan but we want to test by ourselves.
        $myList['foo'] = 'bar';
        self::assertFalse(array_is_list($myList)); // @phpstan-ignore-line
    }
}