重置PHP数组中的重复值

时间:2012-11-26 18:56:31

标签: php arrays random duplicates

我有一个PHP数组:

$arr = array(1,2,3,3,4,6,6);

我想在每个重复对中找到重复的位置(3和6)并使用rand(1,8)重置该值。我该怎么做呢?我基本上需要确保所有数组值都不同。

2 个答案:

答案 0 :(得分:1)

你可以尝试

$arr = array(1,2,3,3,4,6,6);
$dup = array_diff_assoc($arr,array_unique($arr));
$v = mt_rand(1, 8);

foreach ( $dup as $k ) {
    while ( in_array($v, $arr) ) {
        $v = mt_rand(1, 8);
    }
    $arr[$k] = $v;
}

echo "<pre>";
print_r($arr);

答案 1 :(得分:0)

一种简单的方法是记录数组中有多少项,使用array_unique,最后使用rand重新填充数组:

$size = count($arr);
$arr = array_unique($arr);
while (count($arr) < $size) {
  $arr[] = rand(1,8,$arr);
}

你想重复这个,直到count($ arr)== count(array_unique($ arr))。您还可以使用in_array()和循环创建一个随机函数,该函数可以非常轻松地提供数组中尚未存在的随机值。