为了账号安全,请及时绑定邮箱和手机立即绑定

比较重复的单词并将它们从 php 中的字符串中删除

比较重复的单词并将它们从 php 中的字符串中删除

PHP
互换的青春 2022-10-28 15:01:19
一个字符串如下所示: $string = 'Super this is a test this is a test';输出应该是:Super我正在尝试从字符串中完全删除重复的单词。我发现的是: echo implode(' ',array_unique(explode(' ', $string)));但这是输出: Super this is a test感谢您提供一个简单的方法来做到这一点。
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

这是因为array_unique()将重复项减少到一个值:

接受一个输入数组并返回一个没有重复值的新数组。
源代码

您需要先循环数组(尽管可以想象很多有创意的 array_filter/array_walk 东西):

$string = 'Super this is a test this is a test';


# first explode it

$arr = explode(' ', $string);


# get value count as var

$vals = array_count_values($arr);


foreach ($arr as $key => $word)

{

    # if count of word > 1, remove it

    if ($vals[$word] > 1) {

        unset($arr[$key]);

    }

}


# glue whats left together

echo implode(' ', $arr);

小提琴

作为一般项目使用的功能:

function rm_str_dupes(string $string, string $explodeDelimiter = '', string $implodeDelimiter = '')

{

    $arr = explode($explodeDelimiter, $string);

    $wordCount = array_count_values($arr);


    foreach ($arr as $key => $word)

    {

        if ($wordCount[$word] > 1) {

            unset($arr[$key]);

        }

    }


    return implode($implodeDelimiter, $arr);

}


# example usage

echo rm_str_dupes('Super this is a test this is a test');


查看完整回答
反对 回复 2022-10-28
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您也可以使用数组函数并在一行中执行此操作,而无需使用foreach.

echo implode(' ', array_keys(array_intersect(array_count_values(explode(' ', $string)),[1])));



查看完整回答
反对 回复 2022-10-28
  • 2 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信