0

我有一个 PHP 数组:

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

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

4

2 回答 2

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);
于 2012-11-26T19:08:30.477 回答
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() 和循环创建一个随机函数,该函数很容易给出数组中尚不存在的随机值。

于 2012-11-26T19:04:25.943 回答