web-dev-qa-db-fra.com

Prise en charge intégrée des ensembles en PHP?

Je cherche un moyen simple de créer un tableau en php qui ne permettra pas les entrées en double, mais permettra de combiner facilement d'autres ensembles ou tableaux.

Je m'intéresse surtout à l'existence d'une telle fonctionnalité dans la langue, car écrire la mienne ne serait pas difficile. Je ne veux tout simplement pas si je n'en ai pas besoin.

39
devios1

Juste une idée, si vous utilisez les clés de tableau au lieu de valeurs, vous serez assuré qu'il n'y a pas de doublons, cela permet également de fusionner facilement deux "ensembles".

$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;
62
zrvan

Vous avez trouvé une solution: array_unique

Ajoutez simplement les éléments à un tableau, puis appelez array_unique pour supprimer les doublons, ce qui produira le même effet. Le seul inconvénient est que vous devez vous rappeler de l'appeler. Ce serait mieux s'il y avait une classe pour gérer cela, mais c'est très bien pour mes besoins.

29
devios1

Vous pouvez utiliser array_combine pour supprimer les doublons.

$cars = array("Volvo", "BMW", "Toyota");
array_Push($cars,"BMW");

$map = array_combine($cars, $cars);
0
Preetam Purbia

Dans Laravel, il existe une méthode unique dans Collection classe qui peut être utile. De Laravel documentation :

$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]
0
mp31415

J'ai aussi eu ce problème et j'ai donc écrit une classe: https://github.com/jakewhiteley/php-set-object

Comme suggéré, il étend et ArrayObject et permet l'insertion/itération/suppression de valeurs de manière native, mais sans utiliser array_unique() nulle part.

L'implémentation est basée sur les documents MDN JS Docs for Sets dans JavaScript EMCA 6.

0
Jake Whiteley