Does PHP 5.x avez - vous une sorte de HashSet ou de Set Class?
j'ai L'habitude de Java là où j'ai HashSets
,ArrayLists
et Collections
. Mais je travaille sur un projet PHP en ce moment.
j'ai besoin de créer un ensemble, remplir cet ensemble avec des objets (chaînes dans ce cas), mais l'ensemble ne peut contenir chaque objet qu'une seule fois. En outre, je veux supprimer un certain objet à la fin de cet ensemble s'il existe. Ce serait assez facile avec les classes Java collection. Mais comment puis-je implémenter cela en PHP?
existe-il des méthodes de array()
que je suis absent? Je suis à l'aide de PHP 5.3.
4 réponses
la documentation PHP dit:
un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui associe les valeurs clés. Ce type est optimisé pour plusieurs différentes utilisations; il peut être traité comme un tableau, list (vector), hash table (l'implémentation d'une carte), dictionnaire, collection, pile, la file d'attente, et probablement plus. Comme les valeurs de tableau peuvent être d'autres tableaux, les arbres et les tableaux multidimensionnels sont également possibles.
Donc maybee(!) vous n'avez pas besoin D'un HashSet, parce qu'un Tableau normal est déjà implémenté comme une sorte de structure d'index optimisée :)
si ce ne sont que des chaînes, vous pouvez utiliser des tableaux comme sets:
$arr['str1'] = null;
$arr['str2'] = null;
$arr['str1'] = null;
print_r(array_keys($arr));
votre seul problème potentiel est que les chaînes numériques sont implicitement converties en entiers, si possible. Mais ce N'est généralement pas un problème dans PHP parce que le type n'a pas d'importance dans la plupart des circonstances.
Je ne suis pas tout à fait sûr, mais je pense SplObjectStorage
est-ce que vous voulez:
http://php.net/manual/en/class.splobjectstorage.php
Oh, et les cordes ne sont pas des objets. Ainsi, vous pouvez simplement faire ceci:
$foo['bar'] = true;
et le tableau fonctionne comme une façon de mettre en magasin les chaînes.
$values = array(1, 3, 6, 4, 3, 3, 7, 1);
$hashset = array();
foreach ($values as $value){
if (!array_key_exists($value, $hashset)){
echo $value." ";
$hashset[$value] = true;
}
}
empreintes: 1 3 6 4 7