Is there a better (faster) solution to remove duplicates from a comma separated string?
public function d($dep) {
if (strpos($dep,\',\') !== false) {
You could use the uniqueness of array keys:
function d($dep) {
return implode(',', array_keys(array_flip(explode(',', $dep))));
}
array_flip swaps the key-value association, so the values become the keys and vice versa. This will automatically eliminate duplicates. Its runtime complexity is O(n).
Many many thanks guys. Finally, we have two solutions (Pascal and Ericso gave the same solution) here and the question became which one is faster. To be honest, by faster, I meant what executes faster and if I take words of Gumbo, I get the combined functions of array_keys
and array_flip
is faster than array_unique
. Because, the two other functions, implode
and explode
are same.
return implode(',', array_unique(explode(',', $dep)));
return implode(',', array_keys(array_flip(explode(',', $dep))));
Finally I gave 1 up to all three ad many thanks that can't be measured / seen. I agree that either of the three solutions can be expected, but then took the answer of Gumbo believing that array_keys(array_flip())
is faster to execute than array_unique()
in the given context.
Cheers.
$str = implode(',',array_unique(explode(',', $str)));
I would probably use the same kind of idea that what you posted ; but I think you can remove your two conditions, to use only this :
$exploded = explode(',', $str);
$unique = array_unique($exploded);
$imploded = implode(',', $unique);
var_dump($imploded);
I've tested it with those three strings, and it seems to work in each case :
$str = 'a,b,c,d,a,c,e,f';
$str = 'a,a';
$str = 'a';
Notes :
Of course, you can also remove the variables, and use only one line :
$result = implode(',', array_unique(explode(',', $str)));
Not sure it's easier to understand that way, though...
Try just this:
$uniqueDep = implode(',', array_unique(explode(',', $dep)));