【问题标题】:How to remove duplicate words from string using php? [duplicate]如何使用php从字符串中删除重复的单词? [复制]
【发布时间】:2019-08-14 18:49:12
【问题描述】:

下面是我的变量,

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

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

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

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

【问题讨论】:

  • 出于某种原因,我像下面这样连接字符串,forloop(){ $string .= $a[i].',';} 然后最终得到这样的结果
  • 即使有这种类型的“数据”,链接也会为您提供答案
  • 您也必须告诉 PHP 唯一的含义,否则它不理解您的意思不是删除一个逗号以外的所有字符,或者您的意思是唯一的字母块而不是单个字母:在, 上爆炸成一个数组; array_unique(),然后用 , 内爆
  • 回顾这个旧页面,这个问题是 Louis 发布的关闭链接的精确副本。 (它消失了,但我正在恢复它)

标签: php string array-unique


【解决方案1】:

不知道php有没有这样的功能,不过可以这样处理:live demo

$raw = 'AAA,BBB,aAA,BbB,AAA,BbB';
$string = implode(',', array_unique(explode(',', $raw)));

【讨论】:

    【解决方案2】:

    郑重声明,我完全支持 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()。 *不幸的是,它是一条两条线:{


    附言

    @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);
    

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2012-03-14
      • 1970-01-01
      • 2013-08-11
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多