是否有更好(更快)的解决方案从逗号分隔的字符串中删除重复项?
public function d($dep) {
if (strpos($dep,',') !== false) {
$nd = explode(',',$dep);
$oa = array_unique($nd);
$nx = (count($oa) > 1) ? implode(",",$oa) : $oa[0];
}
else {
$nx = $dep;
}
return $nx;
}
Run Code Online (Sandbox Code Playgroud)
多谢你们.
Gum*_*mbo 21
您可以使用数组键的唯一性:
function d($dep) {
return implode(',', array_keys(array_flip(explode(',', $dep))));
}
Run Code Online (Sandbox Code Playgroud)
array_flip交换键值关联,因此值成为键,反之亦然.这将自动消除重复.它的运行时复杂度为O(n).
eri*_*sco 13
试试吧:
$uniqueDep = implode(',', array_unique(explode(',', $dep)));
Run Code Online (Sandbox Code Playgroud)
我可能会使用与您发布的相同的想法;但我认为你可以删除你的两个条件,只使用这个:
$exploded = explode(',', $str);
$unique = array_unique($exploded);
$imploded = implode(',', $unique);
var_dump($imploded);
Run Code Online (Sandbox Code Playgroud)
我已经用这三个字符串对其进行了测试,它似乎在每种情况下都有效:
$str = 'a,b,c,d,a,c,e,f';
$str = 'a,a';
$str = 'a';
Run Code Online (Sandbox Code Playgroud)
注意事项:
explode不包含分隔符的字符串将返回一个包含一个元素的数组——不需要使用 strpos 进行测试。implode也可以(不添加任何分隔符)——也不需要使用三元运算符进行测试。
当然,你也可以删除变量,只使用一行:
$result = implode(',', array_unique(explode(',', $str)));
Run Code Online (Sandbox Code Playgroud)
但不确定这样更容易理解……