如何使用PHP从字符串中删除重复的单词?

时间:2017-04-06 10:11:48

标签: php string array-unique

下面是我的变量,

$string = 'AAA,BBB,aAA,BbB,AAA,BbB';

我需要下面的唯一字符串结果

$string = 'AAA,BBB,aAA,BbB';

如何使其独特就像array_unique()函数一样,是否有任何默认的String函数来删除PHP中的重复字符串?

2 个答案:

答案 0 :(得分:8)

我不知道php是否有这样的功能,但您可以这样处理: live demo

{3}

答案 1 :(得分:1)

为了记录,我完全支持Kris'方法,这就是我选择的方式,如果这是我的项目。但是,我想补充一点,还有其他几种方法可以为这只猫提供皮肤:

代码:(Demo

$raw = 'AAA,BBB,aAA,BbB,BbB,AAA';

// str_word_count() -> array_unique() -> implode()
echo implode(',',array_unique(str_word_count($raw,1)));
echo "\n";

// str_getcsv() -> array_unique() -> implode()
echo implode(',',array_unique(str_getcsv($raw)));
echo "\n";

// preg_match_all() -> array_unique() -> join()
echo join(',',array_unique(preg_match_all("/[A-Za-z]{3}/",$raw,$m)?$m[0]:array()));
echo "\n";

// preg_split() -> array_unique() -> join()
echo join(',',array_unique(preg_split("/,/",$raw)));
echo "\n";

// preg_replace() -> parse_str() -> implode()
parse_str(preg_replace('/(^|,)([A-Za-z]{3})/',"$2=$2&",$raw),$array);
echo implode(',',$array);

我有5种不同的方法可以在不使用explode()的情况下分解csv字符串。

1个不使用array_unique的方法。

当然,implode()join()可以互换使用,因为它们是同义词。

我认为第五种方法是我的最爱,因为它是最古怪的,并没有使用array_unique()。 *不幸的是,这是一个两行班:{

P.S。

@Thiyagu说这是字符串的构造方式:

forloop(){ $string .= $a[i].',';}

如果确实如此,则可以通过利用临时数组在此循环内完成重复删除。这样做的另一个好处是省略了连接生成的尾随逗号。

foreach($data as $value){
    $result[$value]=$value;  // duplicate values will be overwritten because arrays may not have two identical keys
}
echo implode(',',$result);