Indexation d'un tableau PHP d'objets par leur classe

PubliĂ© le 17/06/2023 • ActualisĂ© le 17/06/2023


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 indexer d'un tableau PHP d'objets par leur classe. On peut utiliser la fonction array_reduce au lieu de faire une boucle. Veuillez noter que l'on ne peut faire cela que si l'on est sĂ»r que le tableau ne contient pas plusieurs instances du mĂȘme type d'objets. On peut le vĂ©rifier en vĂ©rifiant le nombre des deux tableaux, celui-ci doit dont ĂȘtre identique.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use App\Samples\OrderPlacedEvent;
use App\Samples\ProductSample;
use App\Samples\SortableObject;

/**
 * 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 Snippet261Trait
{
    public function snippet261(): void
    {
        $objects = [
            new ProductSample(),
            new OrderPlacedEvent(),
            new SortableObject('foo'),
            // new SortableObject('bar'),
        ];
        var_dump($objects);

        $indexedByClass = array_reduce($objects, static function ($carry, $item) {
            $carry[\get_class($item)] = $item; // @phpstan-ignore-line

            return $carry;
        }, []);

        var_dump($indexedByClass);

        var_dump($indexedByClass[OrderPlacedEvent::class]);

        if (\count($objects) === \count($indexedByClass)) {
            echo PHP_EOL."The array doesn't contain duplicates of the same class.";
        }

        // That's it! 😁
    }
}

 ExĂ©cuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet alĂ©atoire

  Travaillez avec moi !