Найти и заменить дубликаты в массиве

PHP 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 im able to specify. return $ArrayWithReplacedValues; } ?> 

Таким образом, результат должен быть тем же самым массивом с замещенными дублируемыми значениями.

Спасибо за любую помощь.

Вы можете просто отслеживать слова, которые вы видели до сих пор, и заменить их, когда идете.

 // 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 ​​() (ссылка здесь), чтобы подсчитать количество раз, когда оно появляется.

 // 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; } } 

Используйте функцию array_unique ()

Дополнительную информацию см. На странице http://php.net/manual/en/function.array-unique.php.

Вот пример, как создавать уникальные значения и заменять повторяющиеся значения в массиве

 function get_unique_val($val, $arr) { if ( in_array($val, $arr) ) { $d = 2; // initial prefix preg_match("~_([\d])$~", $val, $matches); // check if value has prefix $d = $matches ? (int)$matches[1]+1 : $d; // increment prefix if exists preg_match("~(.*)_[\d]$~", $val, $matches); $newval = (in_array($val, $arr)) ? get_unique_val($matches ? $matches[1].'_'.$d : $val.'_'.$d, $arr) : $val; return $newval; } else { return $val; } } function unique_arr($arr) { $_arr = array(); foreach ( $arr as $k => $v ) { $arr[$k] = get_unique_val($v, $_arr); $_arr[$k] = $arr[$k]; } unset($_arr); return $arr; } $ini_arr = array('dd', 'ss', 'ff', 'nn', 'dd', 'ff', 'vv', 'dd'); $res_arr = unique_arr($ini_arr); //array('dd', 'ss', 'ff', 'nn', 'dd_2', 'ff_2', 'vv', 'dd_3'); с function get_unique_val($val, $arr) { if ( in_array($val, $arr) ) { $d = 2; // initial prefix preg_match("~_([\d])$~", $val, $matches); // check if value has prefix $d = $matches ? (int)$matches[1]+1 : $d; // increment prefix if exists preg_match("~(.*)_[\d]$~", $val, $matches); $newval = (in_array($val, $arr)) ? get_unique_val($matches ? $matches[1].'_'.$d : $val.'_'.$d, $arr) : $val; return $newval; } else { return $val; } } function unique_arr($arr) { $_arr = array(); foreach ( $arr as $k => $v ) { $arr[$k] = get_unique_val($v, $_arr); $_arr[$k] = $arr[$k]; } unset($_arr); return $arr; } $ini_arr = array('dd', 'ss', 'ff', 'nn', 'dd', 'ff', 'vv', 'dd'); $res_arr = unique_arr($ini_arr); //array('dd', 'ss', 'ff', 'nn', 'dd_2', 'ff_2', 'vv', 'dd_3'); 

Полный пример вы можете посмотреть здесь webbystep.ru

 $uniques = array(); foreach ($charset as $value) $uniques[$value] = true; $charset = array_flip($uniques);