如何使用 php 从字符串中删除重复的单词?
How to remove duplicate words from string using php?
下面是我的变量,
$string = 'AAA,BBB,aAA,BbB,AAA,BbB';
我需要下面的唯一字符串结果,
$string = 'AAA,BBB,aAA,BbB';
如何使它像 array_unique()
函数一样唯一,是否有任何默认的字符串函数来删除 PHP 中的重复字符串?
不知道php有没有这样的功能,你可以这样处理:live demo
$raw = 'AAA,BBB,aAA,BbB,AAA,BbB';
$string = implode(',', array_unique(explode(',', $raw)));
郑重声明,我完全支持 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})/',"=&",$raw),$array);
echo implode(',',$array);
我有 5 种不同的方法来分解 csv 字符串而不使用 explode()
。
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);
下面是我的变量,
$string = 'AAA,BBB,aAA,BbB,AAA,BbB';
我需要下面的唯一字符串结果,
$string = 'AAA,BBB,aAA,BbB';
如何使它像 array_unique()
函数一样唯一,是否有任何默认的字符串函数来删除 PHP 中的重复字符串?
不知道php有没有这样的功能,你可以这样处理:live demo
$raw = 'AAA,BBB,aAA,BbB,AAA,BbB';
$string = implode(',', array_unique(explode(',', $raw)));
郑重声明,我完全支持 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})/',"=&",$raw),$array);
echo implode(',',$array);
我有 5 种不同的方法来分解 csv 字符串而不使用 explode()
。
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);