Does PHP 5.x have some kind of HashSet or Set Class?

China☆狼群 提交于 2019-12-23 06:56:33

问题


I'm used to Java where I have HashSets, ArrayLists and other Collections. But I'm workting on a PHP project right now.

I need to create a set, fill that set with objects (Strings in this case), but the Set can only contain each object once. In addition I want to remove a certain object in the end from this set if it exists. This would be pretty easy with the Java collection classes. But how can I implement that in PHP?

Are there any methods of array() that I am missing? I'm using PHP 5.3.


回答1:


PHP documentation says:

An array in PHP is actually an ordered map. A map is a type that associates values to keys. This type is optimized for several different uses; it can be treated as an array, list (vector), hash table (an implementation of a map), dictionary, collection, stack, queue, and probably more. As array values can be other arrays, trees and multidimensional arrays are also possible.

So maybee(!) you don't need a HashSet, because a normal array is implemented already as a kind of an optimized index structure :)




回答2:


If it's just strings, you can use arrays as sets:

$arr['str1'] = null;
$arr['str2'] = null;
$arr['str1'] = null;

print_r(array_keys($arr));

You only potential problem is that numeric strings are implicitly converted to integers, if possible. But that's usually not a problem in PHP because the type doesn't matter in most circumstances.




回答3:


I'm not exactly sure, but I think SplObjectStorage does what you want:

http://php.net/manual/en/class.splobjectstorage.php

Oh, and strings are not objects. So you can just do this:

$foo['bar'] = true;

and the array will work as a way to uniquely store the strings.




回答4:


$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;
    }
}

Prints: 1 3 6 4 7



来源:https://stackoverflow.com/questions/4730745/does-php-5-x-have-some-kind-of-hashset-or-set-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!