查找和替换数组中的重复项

2022-01-10 00:00:00 arrays find duplicates replace php

我需要用一些随机值填充数组,但如果数组中有重复项,我的应用程序将无法正常工作.所以我需要编写脚本代码来查找重复项并将它们替换为其他一些值.好的,例如我有一个数组:

I need to make app with will fill array with some random values, but if in array are duplicates my app not working correctly. So I need to write script code which will find duplicates and replace them with some other values. Okay so for example i have an array:

<?PHP
$charset=array(123,78111,0000,123,900,134,00000,900);

function arrayDupFindAndReplace($array){

// if in array are duplicated values then -> Replace duplicates with some other numbers which ones I'm able to specify.
return $ArrayWithReplacedValues;
}
?>

因此结果应该是具有替换重复值的相同数组.

So result shall be the same array with replaced duplicated values.

推荐答案

您可以只跟踪到目前为止看到的单词并随时替换.

You can just keep track of the words that you've seen so far and replace as you go.

// words we've seen so far
$words_so_far = array();
// for each word, check if we've encountered it so far
//    - if not, add it to our list
//    - if yes, replace it
foreach($charset as $k => $word){
    if(in_array($word, $words_so_far)){
        $charset[$k] = $your_replacement_here;
    }
    else {
        $words_so_far[] = $word;
    }
}

对于稍微优化的解决方案(对于没有那么多重复项的情况),请使用 array_count_values() (参考这里) 来计算它出现的次数.

For a somewhat-optimized solution (for cases where there are not that many duplicates), use array_count_values() (reference here) to count the number of times it shows up.

// counts the number of words
$word_count = array_count_values($charset);
// words we've seen so far
$words_so_far = array();
// for each word, check if we've encountered it so far
//    - if not, add it to our list
//    - if yes, replace it
foreach($charset as $k => $word){
    if($word_count[$word] > 1 && in_array($word, $words_so_far)){
        $charset[$k] = $your_replacement_here;
    }
    elseif($word_count[$word] > 1){
        $words_so_far[] = $word;
    }
}

相关文章