从PHP中的字符串中删除重复项

2021/01/10 08:21 · php ·  · 0评论

我正在寻找以逗号分隔的字符串中删除重复值的最快方法。

所以我的弦看起来像这样;

$str = 'one,two,one,five,seven,bag,tea';

我可以将字符串分解为值然后进行比较,但是我认为这样做会很慢。那么preg_replace()会更快吗?使用此功能有人吗?

最短的代码是:

$str = implode(',',array_unique(explode(',', $str)));

如果它是最快的...我不知道,那么它可能快于显式循环。

参考:implodearray_uniqueexplode

处理: $string = 'one,two,one,five,seven,bag,tea';

如果要在“ up script”的任何位置生成字符串,则应避免重复出现。

假设您使用串联来生成字符串,例如:

$string='';
foreach($data as $value){
    $string.=(strlen($string)?',':'').some_func($value);
}

...然后您将需要$string根据定界符(逗号)从中提取唯一值,然后重新使用定界符进行内插。


我建议您设计一个更直接的方法,并在初始foreach循环中拒绝重复项,如下所示:

foreach($data as $value){
    $return_value=some_func($value);  // cache the returned value so you don't call the function twice
    $array[$return_value]=$return_value;  // store the return value in a temporary array using the function's return value as both the key and value in the array.
}
$string=implode(',',$array);  // clean: no duplicates, no trailing commas

之所以可行,是因为绝不允许重复的值存在。所有后续出现的事件将用于覆盖先前出现的事件。此无功能的过滤器起作用是因为数组在同一array(level)中可能没有两个相同的键。

另外,您可以通过调用来避免在循环中“覆盖”数组数据,if(!isset($array[$return_value])){$array[$return_value]=$return_value;}但区别是isset()每次迭代都调用该函数。使用这些关联键分配的优点在于,该过程避免使用in_array()比慢的过程isset()

话虽如此,如果您要从二维数组中提取数据列,例如:

$string='';
foreach($data as $value){
    $string.=(strlen($string)?',':'').$value['word'];
}

然后,您可以利用array_column()无循环这样的魔术

echo implode(',',array_column($str,'word','word'));

最后,对于那些对微优化感兴趣的人,我会注意到,单次调用array_unique()实际上比一些两种功能的方法要慢。 在此处阅读更多信息。

最重要的是,有很多方法可以执行此任务。explode->unique->implode在某些情况下,如果您不生成定界字符串,这可能是最简洁的方法,但它不一定是最直接或最快的方法。为自己选择最适合自己的任务。

本文地址:http://php.askforanswer.com/congphpzhongdezifuchuanzhongshanchuzhongfuxiang.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!