Indexation d'un tableau PHP d'objets par leur classe
Publié le 17/06/2023 • Actualisé le 17/06/2023
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
A vous de jouer !
Ces articles vous ont été utiles ? Vous pouvez m'aider à votre tour de plusieurs manières : (cliquez sur le lien "reply" dans à droite pour me contacter )
- Me remonter des erreurs ou typos.
- Me remonter des choses qui pourraient être améliorées.
- Aimez et repostez !
- Suivez moi sur Bluesky 🦋
- Inscrivez-vous au flux RSS.
- Cliquez sur les boutons Plus sur Stackoverflow pour me faire gagner des badges "annonceur" 🏅.
Merci et à très bientôt sur Strangebuzz ! 😉